定位为4.7.2的Asp.net网站项目无法使用MSBuild解析.netstandard 2.0参考

时间:2019-04-29 08:24:53

标签: c# asp.net .net .net-core msbuild

我有一个.net 4.0 asp.net网站(旧的网站,没有.csproj)。 这引用了.net Framework 4.0类库(共享库A)。

我向解决方案添加了一个新的.net核心API项目。 该项目还需要与共享库A对话。

解决方案(我认为)是将类库移至.net标准2.0,然后将网站移至4.7.2,这将使其可以引用.net标准2.0项目。

为此,我更改了网站的Web配置,以便:

 <compilation debug="true" targetFramework="4.7.2">
 <httpRuntime maxRequestLength="10000" executionTimeout="1000" requestValidationMode="2.0" targetFramework="4.7.2"/>

这一切都可以在Visual Studio中使用。该解决方案可以构建,网站可以运行,.netstandard2.0库中的代码可以按预期运行并且可以调试。 我知道Visual Studio在某些方面与MSBuild.exe不同。

问题在于我们的CI服务器无法构建解决方案,本地“ MSBuild.exe”也无法构建。

我正在运行的命令是:

"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\MSBuild.exe" "[Path to Solution]\AT3.sln"

然后我得到了错误:

 warning MSB3268: The primary reference "C:\Work\AT3\at3\wrld\AT3.Common.Utilit ies\bin\Debug\netstandard2.0\AT3.Application.Utilities.dll" could not be resolved because it has an indirect depende ncy on the framework assembly "netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" which  could not be resolved in the currently targeted framework. ".NETFramework,Version=v4.7.2". To resolve this problem,  either remove the reference "C:\Work\AT3\at3\wrld\AT3.Common.Utilities\bin\Debug\netstandard2.0\AT3.Application.Uti lities.dll" or retarget your application to a framework version which contains "netstandard, Version=2.0.0.0, Cultur e=neutral, PublicKeyToken=cc7b13ffcd2ddd51"

为尝试解决此问题,我在web.config的部分中添加了以下行:

 <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51"/>

我的问题是: 如何使用MSBuild.exe解决这个.netstandard2.0项目? 网站可以实际上是“ 4.7.2”并成功引用.net标准吗,还是Visual Studio可以说对我说谎?

注意: 我知道我们需要将网站移至Web项目。 我只是希望这不是解决此问题的唯一方法,因为它只是一个整体网站。 我们的计划是开始将代码从App_Code缓慢迁移到.netstandard2.0库。

先谢谢您

2 个答案:

答案 0 :(得分:1)

我刚刚向同事学习。

您可以尝试在.Net Standard库的csproj文件中添加引用,如下所示。 这对我有用。

<Reference Include="netstandard">
  <Private>True</Private>
</Reference>

答案 1 :(得分:0)

我们遇到了类似的问题。在我们的案例中,我们能够修改nuget包以支持多个目标框架。我们在netstandard的基础上增加了对4.7.2的明确支持。