Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 编译器指令如何在Visual Studio 2015中使用project.json_C#_.net_Visual Studio_Visual Studio 2015_Project.json - Fatal编程技术网

C# 编译器指令如何在Visual Studio 2015中使用project.json

C# 编译器指令如何在Visual Studio 2015中使用project.json,c#,.net,visual-studio,visual-studio-2015,project.json,C#,.net,Visual Studio,Visual Studio 2015,Project.json,我正在创建一个可重用库,该库面向多个平台(.NET 4.0、.NET 4.5、.NETStandard1.0和.NETStandard1.3)。我曾经在两个独立的项目中维护这个库;一个项目根据.NET4.0和.NET4.5编译,另一个项目编译.NETStandard1.0。但是,这种做法非常不方便,因为它迫使我维护两个项目,并将项目文件从一个项目链接到另一个项目 我现在正试图将其集成到一个项目中,这应该很容易,因为新的project.json结构允许我们使用buildOptions指定frame

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

我现在正试图将其集成到一个项目中,这应该很容易,因为新的project.json结构允许我们使用
buildOptions
指定
frameworks
。不幸的是,我被卡住了,我的项目不再编译。这让我相信我对构建系统的工作方式有一个错误的看法

为了说明我的问题,我将其简化为以下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,它们都有自己的编译器指令
NET45
NETStandard
。到目前为止还不错,但一旦我开始在代码中使用这些编译器指令,事情就停止了:

使用系统;
公开课Foo
{
#如果NET45
public const string Bar=“NET45”;
#恩迪夫
#如果是NETSTANDARD
public const string Bar=“NETSTANDARD”;
#恩迪夫
公共食物(
{
系统控制台写入线(Bar);
}
}
对于给定的配置和类别,我的观察结果如下:

  • VisualStudio中的语法高亮显示将灰显
    public const字符串
    定义
  • 尽管如此,代码似乎是在net45框架下编译的,因为编译C#编译器错误只是抱怨
    Bar
    .NETStandard,Version=1.3
    下不可用
  • 在bin\debug文件夹中查找时,有一个\net45文件夹包含编译后的.dll,但\netstandard1.3文件夹为空

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

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

{
"version": "1.0.0-*",

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

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

也许您也知道这个问题的答案?