0

我有一个 SDK 风格的 .Net 类库,可以在我的本地机器上正确编译,但是在构建服务器上失败。

.csproj 的内容是

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>net35;net40;netstandard1.0</TargetFrameworks>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <Version>1.5.6</Version>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
  </PropertyGroup>

</Project>

显示的错误是:NETSDK1045:当前的 .NET SDK 不支持面向 .NET Standard 4.0。以 .NET Standard 2.1 或更低版本为目标,或者使用支持 .NET Standard 4.0 的 .NET SDK 版本

我在构建服务器上安装了 .NET Core 3.1.113,在本地机器上安装了 .NET 5。

注意:如果我netstandard1.0从 TargetFrameworks 中删除,那么两台机器上的构建都会成功。但是,我希望我的库也以 .net 标准 1.0 为目标。

我不明白为什么 v4.0 在构建服务器上被视为 .NET Standard 4.0。谁能让我知道问题可能是什么?

4

2 回答 2

2

从文件中删除以下行.csproj

<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

这会覆盖 SDK 推断出的版本值,该值TargetFramework会干扰您的定义net3.5等等 - 您实际上构建了 .NET Framework 4.0 两次,然后覆盖netstandard1.0到 .NET Standard(推断TargetFrameworkIdentifier)到 4.0。较新版本的 SDK 可能具有不同的推理逻辑,这可能是 3.1 和 5.0 SDK 之间的差异,但这仍然是 csproj 中的错误。

如果您的构建逻辑依赖于TargetFrameworkVersion在项目中定义,我建议您尝试更改构建逻辑 - 在您依赖TargetFrameworkTargetFrameworks(复数)的现代 csproj 文件中,这是非常危险的。您也可以尝试将其移动到<PropertyGroup>具有始终错误条件的单独文件中(例如<PropertyGroup Condition="'$(ThisIsToWorkAroundBuildScripts)' == 'True'">

于 2021-04-23T14:04:18.927 回答
-1

我不明白为什么 v4.0 在构建服务器上被视为 .NET Standard 4.0。谁能让我知道问题可能是什么?

这很奇怪,我以前没有见过这个问题。而且没有关于的信息.NET Standard 4.0,我也不知道为什么 VS 将v4.0(net framework 4.0) 视为net standard 4.0. 也许您的服务器环境存在一些问题。

请遵循这些:

1)首先,请dotnet --list-sdks在CMD下使用检查您是否安装了net core 2.1sdk或任何其他版本。实际上,net core 2.1 sdk 可以支持以前的 sdk,包括net standard 1.0. 也许你最好安装net core 2.1 sdk。此外,您可以安装最新的Net Core 3.1 Sdk

2)检查系统环境变量,查找是否有变量名为MSBuildSDKsPath,如果有,请删除。然后,重新启动。

3)删除构建服务器下的文件夹binobj另外,我建议您最好使用 Build Tool for VS 在服务器上构建您的项目,而不是dotnet build. dotnet cli不包含网络框架的工具。更重要的是,你的项目是多目标框架,它可以构建net corenet standard,而且你必须下载net framework sdk。

这太复杂了,你可以安装VS2019 的构建工具(更可能是一个轻量级的 cmd,它集成了 dotnet、net 框架、所有 vs 环境)。另外,安装Net desktop build toolnet core build tool工作负载,还要安装相关的 sdks。

在此处输入图像描述

完成后,删除binobj文件夹,在 Build Tool for VS 命令下键入:

msbuild xxx\xxx.csproj -t:clean,restore,build 
于 2021-04-23T06:38:53.250 回答