VS2015 project.json 编译排除

VS2015 project.json compile exclusion

在 Visual Studio 2013 年,我能够通过使用编译器常量并修改项目的 .csproj 文件来排除某些 .cs 文件的编译。

像这样:

-- myproject.csproj

<PropertyGroup>
  ...
  <DefineConstants>MY_COMPILER_CONSTANT</DevineConstants>
  ...
</PropertyGroup>
<ItemGroup>
  ...
  <Compile Include="myproject\myfile.cs" Condition="'$(Configuration)' != 'MY_COMPILER_CONSTANT'" />
  ...
</ItemGroup>

然后我的项目完全排除了这个 myfile.cs 被编译,让我避免了一些讨厌的错误。

但现在我正在尝试将我的项目环境迁移到 Visual Studio 2015。

我可以很容易地弄清楚如何将编译器常量添加到 VS2015 项目,但仍在尝试弄清楚如何从编译中排除文件。

我的 project.json 目前看起来像这样:

{
  "frameworks": {
    "net451": {
      "dependencies": { }
    }
  },
  "dependencies": {
    ...
  },
  "buildOptions": {
    "define": [ "MY_COMPILER_CONSTANT" ]
  }
}

添加一个文件进行编译似乎很简单。我认为它必须对 buildOptions 中的 "compile" 配置变量做一些事情。我需要添加什么才能使编译器在构建时忽略 myfile.cs?

在源资源管理器中右键单击 .cs 文件以显示“属性”窗格。在属性窗格中,将生成操作更改为“None”。不应编译该文件。

尝试:buildOptions -> compile -> exclude

例如 - 来自我的 project.json - 如何从编译中排除整个 lib 文件夹:

"buildOptions": {
  "compile": {
    "exclude": [ "lib" ]
  }
}

或来自old docs的另一个例子:

"buildOptions": {
    "compile": ["*.cs"],
    "exclude": ["buggy/**/*.cs", "foo/**/*.*"],
    "publishExclude": ["something/**/*.*"],
    "resource": ["embed/**/*.*"]
}


欲了解更多信息,请查找 project.json reference

备注

在未来的版本中,.NET Core 工具将从 project.json 转移到基于 MSBuild 的项目。

建议仍然对新的 .NET Core 项目使用 project.json 文件,因为在工具发布时会有一个将项目转换为 MSBuild 的路径。

有关详细信息,请参阅 Changes to project.json post on the .NET blog and the Using MSBuild to build .NET Core projects 主题。