Dotnet使用.NET核心2.0和.NET框架项目发布

时间:2017-12-21 06:49:30

标签: .net-core teamcity octopus-deploy dotnet-cli

我希望有人就使用Teamcity构建和发布包含.NET Core / standard 2.0项目和.NET framework 4.6.x项目的解决方案的最佳方式提出一些建议。

目前,我可以构建项目,运行测试,但我无法找到通过dotnet-cli发布它的方法。我们有一个相对较大的解决方案,大约75个.NET核心/标准项目和5个或一些框架项目。在我们的解决方案上运行dotnet发布会导致.NET框架项目出现以下错误:

  

错误:C:\ Program Files \ dotnet \ sdk \ 2.0.3 \ Microsoft.Common.CurrentVersion.targets(3861,5):错误MSB4062:无法加载“Microsoft.Build.Tasks.ResolveManifestFiles”任务从程序集Microsoft.Build.Tasks.Core,Version = 15.1.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a。确认声明是否正确,程序集及其所有依赖项是否可用,以及该任务是否包含实现Microsoft.Build.Framework.ITask的公共类。

如果cli可以尝试忽略发布.NET Framework项目,那将是理想的,但似乎不可能。我正在考虑编写一个powershell脚本来检查我们的解决方案中的所有csproj文件以获取适当的TargetFramework值(即netstandard2.0 / netcoreapp2.0),并单独发布它们,但也许有人知道更好的方法吗?

1 个答案:

答案 0 :(得分:0)

如果任何人都遇到相同的问题,则需要按照@nvoigt的建议重新构建csproj文件。

您可以按照Old csproj to new 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>
   ...

您可以在该帖子中找到更多详细信息。