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

查看:222
本文介绍了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.

我发现的其他问题没有采用新的<TargetFrameworks>方式来考虑框架.这样的东西不起作用:

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 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

这篇关于MsBuild 15中每个TargetFramework的条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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