[英]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.