[英]Change the application target framework when changing build configurations in Visual Studio
[英]Visual Studio - Change target framework when multitargeting
有沒有辦法在不更新 csproj 的情況下更改編譯項目(具有多個目標框架)的框架?
我正在編寫一個同時支持 .NET 4.8 和 .NET 6 的 NuGet 包。(我不能使用 .NET Standard 2.0。)
我有一些文件,我只想在面向 .NET 4.8 時編譯,而其他文件只應在面向 .NET 6.0 時編譯。 我知道有幾種方法可以實現這一點,但我正在嘗試構建我的文件,使目錄/AspNetCore
包含我所有的 .NET 6 文件,而/NetFramework
包含我所有的 .NET 4.8 文件。
有了它,在我的 csproj 中,我可以這樣做:
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0'">
<Compile Remove="NetFramework\**" />
<EmbeddedResource Remove="NetFramework\**" />
<None Remove="NetFramework\**" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net48'">
<Compile Remove="AspNetCore\**" />
<EmbeddedResource Remove="AspNetCore\**" />
<None Remove="AspNetCore\**" />
</ItemGroup>
但是 /AspNetCore 文件夾被隱藏了,因為 IDE 選擇 NET48 作為目標框架。 這在我處理 NET48 代碼時很好,但在我處理 NET6.0 代碼時就不理想了。
如果我在每個文件中使用#if NETFRAMEWORK #elif NET6_0 #endif
語法,那么我可以從項目下拉列表中選擇目標框架,但我想避免在我的文件中包含編譯時邏輯。 我也可以繼續回到我的 csproj 並更新標簽,但我也不想這樣做,以防我不小心忘記將其改回。
像這樣針對多個框架時,在 IDE 中更改目標框架有好處嗎?
在您的解決方案文件夾中創建一個Directory.Build.targets
文件並復制以下內容:
<Project>
<PropertyGroup>
<BuildDependsOn>
RemoveNet48Files;
RemoveNet60Files;
$(BuildDependsOn)
</BuildDependsOn>
</PropertyGroup>
<Target Name="RemoveNet48Files" Condition="'$(TargetFramework)' != 'net48'">
<ItemGroup>
<Compile Remove="NetFramework\**" />
<EmbeddedResource Remove="NetFramework\**" />
<None Remove="NetFramework\**" />
</ItemGroup>
</Target>
<Target Name="RemoveNet60Files" Condition="'$(TargetFramework)' != 'net6.0'">
<ItemGroup>
<Compile Remove="AspNetCore\**" />
<EmbeddedResource Remove="AspNetCore\**" />
<None Remove="AspNetCore\**" />
</ItemGroup>
</Target>
</Project>
這樣,文件只會在構建之前從項目組中刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.