当前位置:  开发笔记 > 编程语言 > 正文

如何在#if语句中设置.NET Core以进行编译

如何解决《如何在#if语句中设置.NETCore以进行编译》经验,为你挑选了4个好方法。

我创建了multy框架项目.我使用这样的东西:

  #if NET40
    Console.WriteLine("hello from net 4");
  #endif

但是我找不到.NET Core的通配符.我试过了 :

   #if NETCOREAPP1.0
     Console.WriteLine("hello from net Core");
   #endif

但这不是有效的声明.谢谢.



1> Ralf Bönning..:

你需要下划线_而不是点:

NETCOREAPP1_0或者更新的NETCOREAPP1_1NETCOREAPP2_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


您可以定义`NETCOREAPP`和`NETSTANDARD`而不使用其版本。我测试了它并在VS2019中工作。

2> 小智..:

扩展Devon对VS2017 .csproj文件的回答:

查看此处的表,您可以使用正则表达式轻松定义常量.因此,如果添加/更改目标框架,则无需考虑更新条件.


  NETFRAMEWORK


  NETSTANDARD


  NETCORE

用法:

#if NETFRAMEWORK
    FrameworkSpecific();
#endif

#if NETSTANDARD
    StandardSpecific();
#endif

#if NETCORE
    CoreSpecific();
#endif


好主意; 遗憾的是,这些NETFRAMEWORK/NETSTANDARD/NETCORE符号不能作为编译器的标准部分使用

3> Vitaliy Fedo..:

您可以按以下方式定义任何自定义条件编译符号(project.json):

"frameworks": {
    "net40": {
      "buildOptions": {
        "define": ["NET_40"]
      }
    },
    "netstandard1.5": {
      "buildOptions": {
        "define": [ "NET_STANDARD" ]
      }

    }
}

这种方法似乎更实用,因为您可以对多个目标使用相同的条件符号,而无需编写类似的东西

#if NET20 && NET 40 && NET45



4> Devon Burris..:

对于新的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

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有