Dot-Net
有沒有辦法將 .NET 標準項目的項目引用強製到特定的 TargetFramework
我是 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”邏輯。