将解决方案更新到.NET 4.7.2时,MSBuild失败

时间:2019-02-12 13:16:36

标签: c# .net msbuild .net-4.7.2

我正在更新使用.NET 4.7.2的解决方案并遇到问题。

我可以在开发机器上构建并运行项目,但TeamCity不能。

在TeamCity构建步骤中,我向MSBuild步骤添加了/p:TargetFrameworkVersion:v4.7.2。

其中一个针对netstandard 2.0和MSBuild的项目给了我一个错误,我应该在其中添加.NET Framework 4.7.2。我将.NET Framework 4.7.2添加为目标,但是没有效果。 这是构建日志中的错误:

  

[NETSdkError] C:\ Program Files \ dotnet \ sdk \ 2.1.402 \ Sdks \ Microsoft.NET.Sdk \ targets \ Microsoft.NET.TargetFrameworkInference.targets(150,5):错误NETSDK1045:当前.NET SDK不支持定位.NET Standard 4.7.2。目标.NET Standard 2.0或更低版本,或者使用支持.NET Standard 4.7.2的.NET SDK版本。

这很奇怪,因为没有.NET Standard 4.7.2,但是我认为它只是错误消息中的错字。

MSBuild工具2017和.NET 4.7.2目标包已安装在代理上。

有什么想法吗?可能是附加的MSBuild参数是问题吗? 失败项目的项目文件如下所示:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>net472;netstandard2.0</TargetFrameworks>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
    <PackageReference Include="Autofac" Version="4.6.1" />
    <PackageReference Include="System.Configuration.ConfigurationManager" Version="4.4.1" />
    <PackageReference Include="System.Net.Http" Version="4.3.3" />
  </ItemGroup>
  <ItemGroup>
    <Reference Include="SomeLibrary">
      <HintPath>..\packages\SomeLibrary.1.0.4\lib\net461\SomeLibrary.dll</HintPath>
    </Reference>
    <ProjectReference Include="..\ProjectName.Core\ProjectName.Core.csproj" />
    <ProjectReference Include="..\ProjectName.Domain\ProjectName.Domain.csproj" />
    <ProjectReference Include="..\ProjectName.Web\ProjectName.Web.csproj" />
  </ItemGroup>
</Project>

当我尝试使用相同的参数在本地运行MSBuild时,它会失败,但会出现完全不同的错误,其中涉及非法语法和C#7语言功能。通过Rider构建解决方案效果很好。

2 个答案:

答案 0 :(得分:2)

如果您使用多目标项目,请改用/p:TargetFramework=net472

TargetFrameworkVersion仅会更改所使用框架的版本,而不是在构建中其他位置使用的TargetFramework值或TargetFrameworkMoniker。因此,没有版本4.7.2的.NET Standard目标框架会引起您的构建问题。

请注意,仅当构建中的所有项目都支持它时,才可以像这样设置全局属性,因此在包含多个可能支持或不支持它的项目的解决方案上使用它时要小心。

答案 1 :(得分:1)

当我在代理计算机上仅安装框架4.7.2时,出现了相同的错误。 您需要安装开发人员SDK包(NDP472-DevPack.exe) -NDP472-DevPack.exe的链接: https://dotnet.microsoft.com/download/dotnet-framework/thank-you/net472-developer-pack-offline-installer