che*_*r89 4 .net c# msbuild .net-4.7.2
我正在更新解决方案以使用 .NET 4.7.2 并遇到问题。
我可以在开发机器上构建和运行项目就好了,但 TeamCity 不会。
在 TeamCity 构建步骤中,我将 /p:TargetFrameworkVersion:v4.7.2 添加到 MSBuild 步骤。
其中一个面向 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): error 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>
Run Code Online (Sandbox Code Playgroud)
当我尝试使用相同的参数在本地运行 MSBuild 时 - 它失败但出现完全不同的错误,一些关于非法语法和 C#7 语言功能的问题。通过 Rider 构建解决方案工作正常。
如果您使用多目标项目,请/p:TargetFramework=net472改用。
TargetFrameworkVersion只会更改所用框架的版本,而不是在构建中其他地方使用的TargetFramework值或TargetFrameworkMoniker。因此,没有 .NET Standard 目标框架的版本4.7.2会导致您的构建问题。
请注意,设置这样的全局属性可能仅在构建中的所有项目都支持它时才有效,因此在包含可能支持或不支持它的多个项目的解决方案上使用它时要小心。