我正在尝试将stylecop.json包括在我的C#项目中。
<AdditionalFiles Include="stylecop.json">
<Link>stylecop.json</Link>
</AdditionalFiles>
我想知道是否有一种方法可以在不进行任何文本编辑的情况下进行此操作。我知道我总是可以像其他任何文件一样添加它,但这会在项目文件夹中填写文件的副本,而不会在外部链接。
您可以在解决方案目录中的某个地方添加一个Directory.Build.targets
文件(将适用于该目录的所有项目(,并具有以下内容:
<Project>
<ItemGroup>
<AdditionalFiles Update="@(AdditionalFiles)">
<Link Condition="'%(Link)' == ''">%(Identity)</Link>
</AdditionalFiles>
</ItemGroup>
</Project>
请注意,在此处使用%(Identity)
对于" Project Cone"之外的项目不是最佳的选择。 - 例如当您有<AdditionalFiles Include="....foo.bar" />
时。为此,您可以使用类似于基于SDK的项目在VS 2017 15.3/.NET Core 2.0工具的机制:
<Project>
<ItemGroup>
<AdditionalFiles Update="@(AdditionalFiles)">
<LinkBase Condition="'%(LinkBase)' != ''">$([MSBuild]::EnsureTrailingSlash(%(LinkBase)))</LinkBase>
<Link Condition="'%(Link)' == '' And !$([MSBuild]::ValueOrDefault('%(FullPath)', '').StartsWith($([MSBuild]::EnsureTrailingSlash($(MSBuildProjectDirectory)))))">%(LinkBase)%(RecursiveDir)%(Filename)%(Extension)</Link>
</AdditionalFiles>
</ItemGroup>
</Project>
这甚至将保留与e.g...shared***.json
和目标文件夹可以使用LinkBase
元数据设置:
<AdditionalFiles Include="..shared***">
<LinkBase>SharedFiles</LinkBase>
</AdditionalFiles>
请注意,更改Directory.Build.targets
后,您可能需要关闭并重新打开解决方案。在即将到来的VS 2017 15.3更新中,更改将由VS自动监视。在以前的版本中,该文件将由VS缓存,直到解决方案关闭为止。