Dot-Net
MsBuild 15 中每個 TargetFramework 的條件
使用新的 MsBuild 版本,在 .csproj 項目中定位多個框架和框架版本非常容易:
<TargetFrameworks>net40;net45;net461;netcoreapp1.1</TargetFrameworks>現在,我如何為它們中的每一個定義一個常量,以便我可以讓某些程式碼僅作為
netcoreapp1.1pass 的一部分而不是完整的框架編譯?我希望能夠添加一個像這樣的預處理器指令:
#if NET_CORE // some code #endif完整的 .NET Framework 和可能的 .NET Standard 也是如此。
我發現的其他問題沒有考慮
<TargetFrameworks>到定義框架的新方法。像這樣的東西不起作用:<DefineConstants Condition=" '$(TargetFramework)' == '.NETCoreApp' ">NET_CORE</DefineConstants>
已經定義了各種可以使用的預處理器符號。從文件:
.NET 框架
.NET 標準
.NET 核心
.NET 5+
附加
<framework>_OR_GREATER符號從 .NET6 版本開始,
<framework>_OR_GREATER添加了一組符號:例如:
目標框架 符號 .NET 框架 NET48_OR_GREATER,NET472_OR_GREATER,NET471_OR_GREATER,NET47_OR_GREATER,NET462_OR_GREATER,NET461_OR_GREATER,NET46_OR_GREATER,NET452_OR_GREATER,NET451_OR_GREATER,NET45_OR_GREATER,NET40_OR_GREATER,NET35_OR_GREATER,NET20_OR_GREATER.NET 標準 NETSTANDARD2_1_OR_GREATER,NETSTANDARD2_0_OR_GREATER,NETSTANDARD1_6_OR_GREATER,NETSTANDARD1_5_OR_GREATER,NETSTANDARD1_4_OR_GREATER,NETSTANDARD1_3_OR_GREATER,NETSTANDARD1_2_OR_GREATER,NETSTANDARD1_1_OR_GREATER,NETSTANDARD1_0_OR_GREATER.NET 5+(和 .NET Core) NET6_0_OR_GREATER,NET6_0_ANDROID_OR_GREATER,NET6_0_IOS_OR_GREATER,NET6_0_MACOS_OR_GREATER,NET6_0_MACCATALYST_OR_GREATER,NET6_0_TVOS_OR_GREATER,NET6_0_WINDOWS_OR_GREATER,NET5_0_OR_GREATER,NETCOREAPP_OR_GREATER,NETCOREAPP3_1_OR_GREATER,NETCOREAPP3_0_OR_GREATER,NETCOREAPP2_2_OR_GREATER,NETCOREAPP2_1_OR_GREATER,NETCOREAPP2_0_OR_GREATER,NETCOREAPP1_1_OR_GREATER,NETCOREAPP1_0_OR_GREATER#if NETSTANDARD1_6 Console.WriteLine("This is .Net Standard 1.6"); #endif #if NETCOREAPP2_0 Console.WriteLine("This is .Net Core 2.0"); #endif