MsBuild 15 中每个 TargetFramework 的条件 [英] Conditional per TargetFramework in MsBuild 15

查看:15
本文介绍了MsBuild 15 中每个 TargetFramework 的条件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用新的 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.0NET20
.NET 框架 3.5NET35
.NET 框架 4.0NET40
.NET 框架 4.5NET45
.NET 框架 4.5.1NET451
.NET 框架 4.5.2NET452
.NET 框架 4.6NET46
.NET 框架 4.6.1NET461
.NET 框架 4.6.2NET462
.NET 框架 4.7NET47
.NET 框架 4.7.1NET471
.NET 框架 4.7.2NET472
.NET 框架 4.8NET48

.NET 标准

<头>
框架/版本符号
.NET Standard(任何版本)网络标准
.NET 标准 1.0NETSTANDARD1_0
.NET 标准 1.1NETSTANDARD1_1
.NET 标准 1.2NETSTANDARD1_2
.NET 标准 1.3NETSTANDARD1_3
.NET 标准 1.4NETSTANDARD1_4
.NET 标准 1.5NETSTANDARD1_5
.NET 标准 1.6NETSTANDARD1_6
.NET 标准 2.0NETSTANDARD2_0
.NET 标准 2.1NETSTANDARD2_1

.NET 核心

<头>
框架/版本符号
.NET [Core](任何版本)NETCOREAPP
.NET Core 1.0NETCOREAPP1_0
.NET Core 1.1NETCOREAPP1_1
.NET Core 2.0NETCOREAPP2_0
.NET Core 2.1NETCOREAPP2_1
.NET Core 2.2NETCOREAPP2_2
.NET Core 3.0NETCOREAPP3_0
.NET Core 3.1NETCOREAPP3_1

.NET 5+

<头>
框架/版本符号
.NET 5.0NET5_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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆