簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM