有没有办法强制项目引用.NET标准项目到特定的TargetFramework

时间:2018-01-30 16:29:59

标签: .net msbuild .net-core .net-standard .net-standard-2.0

我是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>

提前感谢您提供的任何帮助!

2 个答案:

答案 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