Публикация в Dotnet с проектами .NET core 2.0 и .NET framework

Я надеюсь, что у кого-то есть советы по поводу того, как лучше всего использовать Teamcity для создания и публикации решения, в котором есть как проекты .NET Core / standard 2.0, так и проекты .NET framework 4.6.x.

В настоящее время я могу собрать проект, запустить тесты, но не могу придумать способ опубликовать его через dotnet-cli. У нас есть относительно большое решение, примерно 75 проектов в ядре / стандарте .NET и 5 или несколько проектов фреймворка. Запуск dotnet publish в нашем решении приводит к следующей ошибке в проектах .NET framework:

ошибка: C: \ Program Files \ dotnet \ sdk \ 2.0.3 \ Microsoft.Common.CurrentVersion.targets (3861,5): ошибка MSB4062: задача «Microsoft.Build.Tasks.ResolveManifestFiles» не может быть загружена из сборки Microsoft.Build.Tasks.Core, версия = 15.1.0.0, культура = нейтральный, PublicKeyToken = b03f5f7f11d50a3a. Убедитесь, что объявление правильное, что сборка и все ее зависимости доступны, а задача содержит открытый класс, реализующий Microsoft.Build.Framework.ITask.

Было бы идеально, если бы cli мог попытаться игнорировать публикацию проектов .NET Framework, но это кажется невозможным. Я думаю о написании сценария PowerShell, чтобы проверить все файлы csproj в нашем решении на соответствующее значение TargetFramework (например, netstandard2.0 / netcoreapp2.0) и опубликовать их по отдельности, но, может быть, кто-то знает способ получше?


person Benedict    schedule 21.12.2017    source источник
comment
Все ли ваши проекты используют новую файловую структуру csproj? dotnet CLI работает только с этим.   -  person nvoigt    schedule 21.12.2017
comment
Спасибо, проблема устранилась. Есть ли способ создать новые проекты фреймворка с новым форматом csproj в Visual Studio? Я выполнил следующие инструкции по замене содержимого csproj: hanskindberg.wordpress.com/2017/04/18/   -  person Benedict    schedule 21.12.2017


Ответы (1)


Если кто-то сталкивается с такой же проблемой, вам необходимо реструктурировать файл csproj, как это предлагает @nvoigt.

Вы можете выполнить шаги, описанные в сообщении Старый csproj для новый csproj

Вы можете начать очищать свой файл csproj и начать с формата ниже.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net462</TargetFramework> // if your target is 4.6.2
  </PropertyGroup>
</Project>

  

И теперь вы можете добавить оставшуюся часть своей зависимости, как показано ниже.

   ...
      <ItemGroup>
        <PackageReference Include="Dapper" Version="2.0.4" />
        <PackageReference Include="Microsoft.Azure.Storage.Blob" Version="11.1.1" />
        <PackageReference Include="Microsoft.Extensions.Configuration" Version="3.0.0" />
        <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.0.0" />
        <PackageReference Include="Microsoft.Extensions.Logging" Version="3.0.0" />
        <PackageReference Include="Microsoft.Azure.KeyVault" Version="2.0.6" />
        <PackageReference Include="NLog" Version="4.7.5" />
        <PackageReference Include="NLog.Extensions.Logging" Version="1.6.5" />
      </ItemGroup>
   ...

вы можете найти более подробную информацию в сообщении.

person Amir    schedule 21.11.2020