Dot-Net

有沒有辦法將 .NET 標準項目的項目引用強製到特定的 TargetFramework

  • January 30, 2018

我是 GitHub 項目的貢獻者,最近我們在將.NET Standard 2.0 項目正確安裝到 .NET Framework 4.5 項目​​時遇到了一些問題。其原因是(如果我理解正確的話).NET Standard 2.0 支持的最低 .NET Framework 為 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>

提前感謝您提供的任何幫助!

這是行不通的。對比 2017 年 15.5.5。來自多目標 (net462;netstandard2.0) 類庫的 4.6.2 MSTest 項目 net462 目標的引用。– SerG 2 月 13 日 13:34

確實,解決這個問題的新方法是:

<ProjectReference Include="..\multitargeted_lib\multitargeted_lib.csproj">
 <SetTargetFramework>TargetFramework=netstandard2.0</SetTargetFramework>
</ProjectReference>

來源在這裡

2020 年更新:建議使用的答案SetTargetFramework更合適,也不會與其他設置衝突。

您可以像這樣更改項目參考:

 <ProjectReference Include="..\..\src\ExtendedXmlSerializer\ExtendedXmlSerializer.csproj" 
                   AdditionalProperties="TargetFramework=netstandard2.0" />

強制選擇特定目標框架而不是預設的“獲取最近的 TFM”邏輯。

引用自:https://stackoverflow.com/questions/48526219