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

Mik*_*EEE 13 .net msbuild .net-core .net-standard

我是GitHub项目的贡献者,最近我们将.NET Standard 2.0项目正确安装到.NET Framework 4.5项目中遇到了一些麻烦.原因是(如果我理解正确的话).NET Standard 2.0支持4.6.1的最小.NET Framework.

好,可以.所以我们更新了.csproj以创建另一个框架输出:

<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
Run Code Online (Sandbox Code Playgroud)

在我们的测试项目中,支持的框架定义如下:

<TargetFrameworks>netcoreapp2.0;net471;net45</TargetFrameworks>
Run Code Online (Sandbox Code Playgroud)

但是,我们遇到了net471构建问题,因为它似乎正在采用net45框架而不是框架netstandard2.0.为了使这个工作,我们必须设置TargetFrameworks类库如下:

<TargetFrameworks>netstandard2.0;net471;net45</TargetFrameworks>
Run Code Online (Sandbox Code Playgroud)

这似乎是过度的,因为它似乎.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>
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ich 17

您可以像这样更改项目参考:

  <ProjectReference Include="..\..\src\ExtendedXmlSerializer\ExtendedXmlSerializer.csproj" 
                    AdditionalProperties="TargetFramework=netstandard2.0" />
Run Code Online (Sandbox Code Playgroud)

强制在默认的"获取最近的TFM"逻辑上选择特定的目标框架.

  • 哇!谢谢马丁!正是我想要做的。完美运作。你=英雄。:)我的男人在这里向你大喊:https://github.com/wojtpl2/ExtendedXmlSerializer/commit/14c7ee8c54f505e5f6c10d1a9043dd3edf24c806 (2认同)
  • 这是行不通的。VS 2017年15.5.5。从4.6.2 MSTest项目net462目标的多目标(net462; netstandard2.0)类库中引用。 (2认同)

Lor*_*ori 10

这是行不通的。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>
Run Code Online (Sandbox Code Playgroud)

来源在这里