Ser*_*hur 30 c# asp.net-core-mvc .net-core asp.net-core asp.net-core-1.0
我创建了multy框架项目.我使用这样的东西:
#if NET40
Console.WriteLine("hello from net 4");
#endif
Run Code Online (Sandbox Code Playgroud)
但是我找不到.NET Core的通配符.我试过了 :
#if NETCOREAPP1.0
Console.WriteLine("hello from net Core");
#endif
Run Code Online (Sandbox Code Playgroud)
但这不是有效的声明.谢谢.
Ral*_*ing 46
你需要下划线_而不是点:
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
小智 22
扩展Devon对VS2017 .csproj文件的回答:
查看此处的表,您可以使用正则表达式轻松定义常量.因此,如果添加/更改目标框架,则无需考虑更新条件.
<PropertyGroup Condition="$([System.Text.RegularExpressions.Regex]::IsMatch('$(TargetFramework)', '^net\d'))">
<DefineConstants>NETFRAMEWORK</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="$([System.Text.RegularExpressions.Regex]::IsMatch('$(TargetFramework)', '^netstandard\d'))">
<DefineConstants>NETSTANDARD</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="$([System.Text.RegularExpressions.Regex]::IsMatch('$(TargetFramework)', '^netcoreapp\d'))">
<DefineConstants>NETCORE</DefineConstants>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
用法:
#if NETFRAMEWORK
FrameworkSpecific();
#endif
#if NETSTANDARD
StandardSpecific();
#endif
#if NETCORE
CoreSpecific();
#endif
Run Code Online (Sandbox Code Playgroud)
Vit*_*nko 11
您可以按以下方式定义任何自定义条件编译符号(project.json):
"frameworks": {
"net40": {
"buildOptions": {
"define": ["NET_40"]
}
},
"netstandard1.5": {
"buildOptions": {
"define": [ "NET_STANDARD" ]
}
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法似乎更实用,因为您可以对多个目标使用相同的条件符号,而无需编写类似的东西
#if NET20 && NET 40 && NET45
Run Code Online (Sandbox Code Playgroud)
对于新的Visual Studio 2017 csproj项目系统...
您可以在此处找到可用符号的完整列表:https : //docs.microsoft.com/zh-cn/dotnet/core/tutorials/libraries#how-to-multitarget
您可以在.csproj文件中为其创建复合常量,如下所示:
<PropertyGroup Condition="'$(TargetFramework)' == 'net451' Or '$(TargetFramework)' == 'net461' ">
<DefineConstants>FULLFRAMEWORK;FULL</DefineConstants>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
然后,您可以在#if编译器指令中使用它,如下所示:
#if FULLFRAMEWORK
private bool DoSomethingFullFrameworkSpecific()
{
var connectionStringSetting = ConfigurationManager.ConnectionStrings[connectionStringName];
return connectionStringSetting != null;
}
#endif
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16790 次 |
| 最近记录: |