使用 Directory.Build.props 从所有项目中排除文件夹?

Exclude folder from all projects using Directory.Build.props?

我有一个项目解决方案,每个项目都包含文件夹“Previews”。我希望此文件夹始终从我的项目中排除。

当我通过 Visual Studio“从项目中排除”时,以下内容被添加到 .csproj 文件中:

<ItemGroup>
  <Compile Remove="Previews\**" />
  <EmbeddedResource Remove="Previews\**" />
  <None Remove="Previews\**" />
</ItemGroup>

如果我从 .csproj 文件中删除它,并将其添加到 Directory.Build.props 文件,它不再从 VS 中排除该文件。

我也试过使用 "$(ProjectDir)\Previews\**" 和没有属性的完整路径,两者都不起作用。

如何实现?这似乎应该是可能的,因为 VS 可以获取声明的引用,以及解决方案 .props 文件中的许多其他项目属性。

而不是,你应该使用Directory.Build.targets.

你的操作是覆盖MSBuild上的一些项目,这就是.targets文件的功能。它在csproj文件的底部导入,以便覆盖项目。(msbuild从上到下读取并取最后一个XML节点作为最终值)。

但是 .props 文件被导入到csproj 文件的顶部,它被用来定义一些新的全局属性。 由于在顶部导入,不能作为覆盖值操作,总是被csproj文件主体下的属性覆盖

除此之外,您还可以this official document了解这两个文件的用法

由于你的item remove是覆盖操作,你应该把文件改成Directory.Build.targets.

注意:这两个文件在构建过程中嵌入到主csproj文件中。所以所有的msbuild properties, items,....都可以在这两个文件下使用。