我有一个.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库。
先谢谢您
答案 0 :(得分:1)
我刚刚向同事学习。
您可以尝试在.Net Standard库的csproj文件中添加引用,如下所示。 这对我有用。
<Reference Include="netstandard">
<Private>True</Private>
</Reference>
答案 1 :(得分:0)
我们遇到了类似的问题。在我们的案例中,我们能够修改nuget包以支持多个目标框架。我们在netstandard的基础上增加了对4.7.2的明确支持。