使用新的MsBuild版本,很容易在.csproj项目中定位多个框架和框架版本:
<TargetFrameworks>net40;net45;net461;netcoreapp1.1</TargetFrameworks>
现在,我如何获得为每个代码定义的常量,以便我可以将某些代码仅作为例如netcoreapp1.1
传递而不是完整的框架编译?
我希望能够像这样添加一个预处理器指令:
#if NET_CORE
// some code
#endif
对于完整的.NET Framework和可能的.NET标准也一样。
我发现的其他问题并未采用新的<TargetFrameworks>
方法将框架定义为帐户。像这样的东西不起作用:
<DefineConstants Condition=" '$(TargetFramework)' == '.NETCoreApp' ">NET_CORE</DefineConstants>
答案 0 :(得分:9)
您已经定义了可以使用的各种预处理器符号。来自docs:
.NET Framework 2.0 --> NET20
.NET Framework 3.5 --> NET35
.NET Framework 4.0 --> NET40
.NET Framework 4.5 --> NET45
.NET Framework 4.5.1 --> NET451
.NET Framework 4.5.2 --> NET452
.NET Framework 4.6 --> NET46
.NET Framework 4.6.1 --> NET461
.NET Framework 4.6.2 --> NET462
.NET Framework 4.7 --> NET47
.NET Framework 4.7.1 --> NET471
.NET Framework 4.7.2 --> NET472
.NET Standard 1.0 --> NETSTANDARD1_0
.NET Standard 1.1 --> NETSTANDARD1_1
.NET Standard 1.2 --> NETSTANDARD1_2
.NET Standard 1.3 --> NETSTANDARD1_3
.NET Standard 1.4 --> NETSTANDARD1_4
.NET Standard 1.5 --> NETSTANDARD1_5
.NET Standard 1.6 --> NETSTANDARD1_6
.NET Standard 2.0 --> NETSTANDARD2_0
.Net Core 1.0 --> NETCOREAPP1_0
.Net Core 1.1 --> NETCOREAPP1_1
.Net Core 2.0 --> NETCOREAPP2_0
.Net Core 2.1 --> NETCOREAPP2_1
例如:
#if NETSTANDARD1_6
Console.WriteLine("This is .Net Standard 1.6");
#endif
#if NETCOREAPP2_0
Console.WriteLine("This is .Net Core 2.0");
#endif