你可以在你的解決方案目錄中的某個位置添加一個Directory.Build.targets
文件(適用於所有項目或低於該目錄)包含以下內容:
<Project>
<ItemGroup>
<AdditionalFiles Update="@(AdditionalFiles)">
<Link Condition="'%(Link)' == ''">%(Identity)</Link>
</AdditionalFiles>
</ItemGroup>
</Project>
注意,使用%(Identity)
這裏是不是最佳的項目在「工程錐」之外 - 例如當你有<AdditionalFiles Include="..\..\foo.bar" />
。爲此,您可以使用類似於VS 2017年有什麼SDK-based projects will do 15.3/.NET 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>
這甚至會保留與例如匹配項目的目錄層次結構..\shared\**\*.json
和目標文件夾可以使用LinkBase
元數據進行設置:
<AdditionalFiles Include="..\shared\**\*">
<LinkBase>SharedFiles</LinkBase>
</AdditionalFiles>
請注意,您可能需要關閉,並在修改後Directory.Build.targets
重新打開該解決方案。在即將到來的VS 2017 15.3更新中,更改將由VS自動監控。在以前的版本中,該文件將由VS緩存,直到解決方案關閉。