编译器指令如何在Visual Studio 2015中与project.json一起使用

史蒂文

我正在创建针对多个平台(.NET 4.0,.NET 4.5,.NETStandard1.0和.NETStandard1.3)的可重用库。我曾经在2个独立的项目中维护此库;一个针对.NET 4.0和.NET 4.5编译的项目,另一个针对.NETStandard1.0编译的项目。但是,这种做法非常不方便,因为它迫使我维护两个项目并将项目文件从一个项目链接到另一个项目。

现在我想这个集成到一个单一的项目,这应该是容易的,因为新的project.json结构允许我们指定frameworksbuildOptions不幸的是,我被卡住了,我的项目不再编译了。这使我相信我对此构建系统的工作方式有错误的看法。

为了演示我的问题,我将其简化为以下project.json:

{
  "version": "1.0.0-*",

  "frameworks": {
    "net45": {
      "buildOptions": {
        "defines": [ "NET45" ]
      }
    },
    "netstandard1.3": {
      "buildOptions": {
        "defines": [ "NETSTANDARD" ]
      },
      "dependencies": {
        "NETStandard.Library": "1.6.0"
      }
    }
  }
}

该项目包含两个框架:.NET 4.5和.NETStandard 1.3,它们都有各自的编译器指令NET45NETSTANDARD到目前为止,一切都很好,但是一旦我开始在代码中使用那些编译器指令,一切就停止了:

using System;

public class Foo
{
#if NET45
    public const string Bar = "NET45";
#endif
#if NETSTANDARD
    public const string Bar = "NETSTANDARD";
#endif

    public Foo()
    {
       System.Console.WriteLine(Bar);
    }
}

使用给定的配置和类,我的观察结果是:

  • Visual Studio中的语法突出显示框将这两个public const string定义都显示为灰色
  • 尽管如此代码似乎net45框架下进行编译,因为编译C#编译器错误有关的投诉仅仅Bar是不可下.NETStandard,Version=1.3
  • 当在bin \ debug文件夹中寻找,有一个\ net45文件夹已编译的.dll,但\ netstandard1.3文件夹为空。

以我有限的知识和经验,我希望上面的设置能够正常工作,但是不幸的是,它并没有成功。为什么会这样,应该怎么做才能使其起作用?

EVK

该选项被命名define,不defines因此,要解决您的问题,只是做:

{
"version": "1.0.0-*",

"frameworks": {
  "net45": {
    "buildOptions": {
      "define": [ "NET45" ]
    }
  },
  "netstandard1.3": {
    "buildOptions": {
      "define": [ "NETSTANDARD" ]
    },
    "dependencies": {
    "NETStandard.Library": "1.6.0"
    }
  }
  }
}

但是,实际上您根本不需要定义这些指令,因为它们已经为您定义了(请参阅此处以获取列表)。对于NET 4.5,您已经具有名为“ NET45”的指令,对于另一个框架,其名为“ NETSTANDARD1_3”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Visual Studio 2017中使用CMake设置编译器选项

安装Visual Studio 2015是否会更改VS 2013使用的编译器?

如何在Windows下使用cmake生成使用Intel编译器的Visual Studio项目

如何在Visual Studio 2015 RC中为ASP.NET 5 MVC 6项目设置TypeScript编译器版本?

如何在Visual Studio 2015中使用Clang为Windows编译C ++

CTRL + Space(Edit.CompleteWord)不能与Visual Studio 2015一起使用

如何在Visual Studio中查看模板编译器错误详细信息

在Visual Studio 2013中使用Roslyn编译器

如何在Visual Studio 2015中使用roslyn C#编译器?

如何解决“ Build:Unknown编译器选项'listemittedfiles'。” 在Visual Studio 2015 Update 3上?

Python 3,如何设置Visual Studio C ++ 2015编译器?

如何在Android Studio中启用dex编译器D8(下一代Dex编译器)

如何从Visual Studio编辑器中检索文本以与Roslyn SyntaxTree一起使用?

在C ++中将g ++和Visual Studio 14 2015编译器与regex一起使用时会得到不同的结果

C#-为什么HttpClient PostAsync在.exe中阻止,但可与Visual Studio 2015->调试一起使用?

Visual Studio 2015 C ++编译器可能提供代码内指令集标记

如何在Visual Studio Code for TypeScript中完全导入而获得编译器错误消息?

如何在Dymola 2019 FD01中为Visual Studio编译器利用编译器标志

在Visual Studio 2019中的编译器指令之间切换?

使用g ++编译器在Visual Studio中编译C ++程序会在最后生成%

如何在Visual Studio 2012 Release 2中获得.less编译器支持?

Enterprise Library 6是否可以与Visual Studio 2013和/或2015一起使用?

使打字稿与Visual Studio 2015 RC一起使用?

Visual Studio 2015中的编译器是什么

在Visual Studio 2015中将Node.js代码与Apache Cordova应用程序一起使用

如何将FSharp.Core 4.3与Visual Studio 2015 Community Edition一起使用

如何在Visual Studio中使用更少的自动编译器

如何在Windows 7上将DirectX 11与Visual Studio 2015工具集v140一起使用

如何在 Atmel Studio 中禁用编译器优化?