我创建了multy框架项目.我使用这样的东西:
#if NET40 Console.WriteLine("hello from net 4"); #endif
但是我找不到.NET Core的通配符.我试过了 :
#if NETCOREAPP1.0 Console.WriteLine("hello from net Core"); #endif
但这不是有效的声明.谢谢.
你需要下划线_
而不是点:
NETCOREAPP1_0
或者更新的NETCOREAPP1_1
和NETCOREAPP2_0
文章https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/libraries包含不同预处理器符号的列表.
.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 Standard 1.0 - > NETSTANDARD1_0
.NET Standard 1.1 - > NETSTANDARD1_1
.NET Standard 1.2 - > NETSTANDARD1_2
.NET标准1.3 - > NETSTANDARD1_3
.NET Standard 1.4 - > NETSTANDARD1_4
.NET Standard 1.5 - > NETSTANDARD1_5
.NET Standard 1.6 - > NETSTANDARD1_6
扩展Devon对VS2017 .csproj文件的回答:
查看此处的表,您可以使用正则表达式轻松定义常量.因此,如果添加/更改目标框架,则无需考虑更新条件.
NETFRAMEWORK NETSTANDARD NETCORE
用法:
#if NETFRAMEWORK FrameworkSpecific(); #endif #if NETSTANDARD StandardSpecific(); #endif #if NETCORE CoreSpecific(); #endif
您可以按以下方式定义任何自定义条件编译符号(project.json):
"frameworks": { "net40": { "buildOptions": { "define": ["NET_40"] } }, "netstandard1.5": { "buildOptions": { "define": [ "NET_STANDARD" ] } } }
这种方法似乎更实用,因为您可以对多个目标使用相同的条件符号,而无需编写类似的东西
#if NET20 && NET 40 && NET45
对于新的Visual Studio 2017 csproj项目系统...
您可以在此处找到可用符号的完整列表:https : //docs.microsoft.com/zh-cn/dotnet/core/tutorials/libraries#how-to-multitarget
您可以在.csproj文件中为其创建复合常量,如下所示:
FULLFRAMEWORK;FULL
然后,您可以在#if
编译器指令中使用它,如下所示:
#if FULLFRAMEWORK private bool DoSomethingFullFrameworkSpecific() { var connectionStringSetting = ConfigurationManager.ConnectionStrings[connectionStringName]; return connectionStringSetting != null; } #endif