【问题标题】:How do compiler directives work with project.json in Visual Studio 2015编译器指令如何与 Visual Studio 2015 中的 project.json 一起使用
【发布时间】:2016-11-16 12:25:48
【问题描述】:

我正在创建一个面向多个平台(.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文件夹是空的。

以我有限的知识和经验,我希望上述设置能够工作,但不幸的是它没有。为什么会这样,应该怎么做才能让它发挥作用?

【问题讨论】:

    标签: c# .net visual-studio visual-studio-2015 project.json


    【解决方案1】:

    该选项被命名为define,而不是defines。因此,要解决您的问题,只需执行以下操作:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 2017-04-07
    • 2018-06-08
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多