我是GitHub项目的贡献者,最近我们遇到了.NET Standard 2.0 project installing correctly into a .NET Framework 4.5 project的问题。原因是(如果我理解正确的话).NET Standard 2.0 supports a minimum .NET Framework of 4.6.1。
好的,公平的。所以我们更新了.csproj以创建另一个框架输出:
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
在我们的测试项目中,支持的框架定义如下:
<TargetFrameworks>netcoreapp2.0;net471;net45</TargetFrameworks>
但是,我们遇到了net471
版本的问题,因为它似乎正在挑选net45
框架,而不是netstandard2.0
。为了使这个工作,我们必须设置类库的TargetFrameworks
:
<TargetFrameworks>netstandard2.0;net471;net45</TargetFrameworks>
这似乎过多,因为看起来.netstandard2.0
应该是TargetFramework
选择的net471
,而不是net45
目标。
有没有办法强制项目引用特定的TargetFramework
?我在测试项目中尝试了以下内容,但似乎没有用:
<ItemGroup Condition="'$(TargetFramework)' != 'net471'">
<ProjectReference Include="..\..\src\ExtendedXmlSerializer\ExtendedXmlSerializer.csproj" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net471'">
<ProjectReference Include="..\..\src\ExtendedXmlSerializer\ExtendedXmlSerializer.csproj">
<TargetFramework>netstandard2.0</TargetFramework>
</ProjectReference>
</ItemGroup>
提前感谢您提供的任何帮助!
答案 0 :(得分:13)
您可以像这样更改项目参考:
<ProjectReference Include="..\..\src\ExtendedXmlSerializer\ExtendedXmlSerializer.csproj"
AdditionalProperties="TargetFramework=netstandard2.0" />
强制选择特定目标框架而不是默认的“获取最近的TFM”逻辑。
答案 1 :(得分:4)
它不起作用。 VS 2017年15.5.5。从4.6.2 MSTest项目net462目标的多目标(net462; netstandard2.0)类库中引用。 – SerG 2月13日13:34
是的,解决这个问题的新方法是:
<ProjectReference Include="..\multitargeted_lib\multitargeted_lib.csproj">
<SetTargetFramework>TargetFramework=netstandard2.0</SetTargetFramework>
</ProjectReference>
来源是here。