MsBuild 15 中每个 TargetFramework 的条件 [英] Conditional per TargetFramework in MsBuild 15
问题描述
使用新的 MsBuild 版本,可以非常轻松地在 .csproj 项目中定位多个框架和框架版本:
With the new MsBuild version it's really easy to target multiple frameworks and framework versions in .csproj project:
<TargetFrameworks>net40;net45;net461;netcoreapp1.1</TargetFrameworks>
现在,我如何为它们中的每一个定义一个常量,以便我可以让某些代码仅成为例如的一部分netcoreapp1.1
通过而不是完整的框架编译?
Now, how do I get a constant defined for each of them so that I can have certain code only be part of e.g. netcoreapp1.1
pass and not full framework compilation?
我希望能够添加这样的预处理器指令:
I'd like to be able to add a preprocessor directive like this one:
#if NET_CORE
// some code
#endif
对于完整的 .NET Framework 和可能的 .NET Standard 也是如此.
And the same for full .NET Framework and possibly .NET Standard.
我发现的其他问题没有采用新的
方式将框架定义到帐户中.像这样的东西不起作用:
The other questions I found don't take new <TargetFrameworks>
way of defining the framework into accounts. Stuff like this doesn't work:
<DefineConstants Condition=" '$(TargetFramework)' == '.NETCoreApp' ">NET_CORE</DefineConstants>
推荐答案
已经定义了多种预处理器符号供您使用.来自文档:
There are already various preprocessor symbols defined that you can use. From the docs:
框架/版本 | 符号 |
---|---|
.NET Framework(任何版本) | 网络框架 |
.NET 框架 2.0 | NET20 |
.NET 框架 3.5 | NET35 |
.NET 框架 4.0 | NET40 |
.NET 框架 4.5 | NET45 |
.NET 框架 4.5.1 | NET451 |
.NET 框架 4.5.2 | NET452 |
.NET 框架 4.6 | NET46 |
.NET 框架 4.6.1 | NET461 |
.NET 框架 4.6.2 | NET462 |
.NET 框架 4.7 | NET47 |
.NET 框架 4.7.1 | NET471 |
.NET 框架 4.7.2 | NET472 |
.NET 框架 4.8 | NET48 |
.NET 标准
框架/版本 | 符号 |
---|---|
.NET Standard(任何版本) | 网络标准 |
.NET 标准 1.0 | NETSTANDARD1_0 |
.NET 标准 1.1 | NETSTANDARD1_1 |
.NET 标准 1.2 | NETSTANDARD1_2 |
.NET 标准 1.3 | NETSTANDARD1_3 |
.NET 标准 1.4 | NETSTANDARD1_4 |
.NET 标准 1.5 | NETSTANDARD1_5 |
.NET 标准 1.6 | NETSTANDARD1_6 |
.NET 标准 2.0 | NETSTANDARD2_0 |
.NET 标准 2.1 | NETSTANDARD2_1 |
.NET 核心
框架/版本 | 符号 |
---|---|
.NET [Core](任何版本) | NETCOREAPP |
.NET Core 1.0 | NETCOREAPP1_0 |
.NET Core 1.1 | NETCOREAPP1_1 |
.NET Core 2.0 | NETCOREAPP2_0 |
.NET Core 2.1 | NETCOREAPP2_1 |
.NET Core 2.2 | NETCOREAPP2_2 |
.NET Core 3.0 | NETCOREAPP3_0 |
.NET Core 3.1 | NETCOREAPP3_1 |
.NET 5+
框架/版本 | 符号 |
---|---|
.NET 5.0 | NET5_0 |
例如:
#if NETSTANDARD1_6
Console.WriteLine("This is .Net Standard 1.6");
#endif
#if NETCOREAPP2_0
Console.WriteLine("This is .Net Core 2.0");
#endif
这篇关于MsBuild 15 中每个 TargetFramework 的条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!