我有一个项目的解决方案,每个项目都包含文件夹"预览"我希望这个文件夹永远被排除在我的项目之外。
当我"从项目中排除"时通过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文件主体下的属性覆盖。
item remove
正在覆盖操作,您应该将文件更改为Directory.Build.targets
。
注意:这两个文件在构建期间嵌入到主csproj文件中。所有msbuild属性,项目,....可在两个文件下使用。
使用@Mr。Qian的回答是,当Directory.Build.props
不能工作时,我可以使用Directory.Build.targets
。
对于那些希望在Visual Studio中"隐藏"特定文件/globs的人来说,这里是我的Directory.Build.targets
,它排除了所有项目中的npmpackage.json
,package-lock.json
和NuGetpackages.lock.json
文件:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Content Remove="*lock.json" />
<Content Remove="package.json" />
<None Remove="*lock.json" />
<None Remove="package.json" />
</ItemGroup>
</Project>