2017-06-07 26 views
1

我想包括在上的Visual Studio 2017年我的C#項目stylecop.json我已經找到了如何在任何文本編輯器修改的.csproj做到這一點:鏈接其他文件在Visual Studio

<AdditionalFiles Include="stylecop.json"> 
     <Link>stylecop.json</Link> 
</AdditionalFiles> 

我想知道是否有辦法做到這一點,而不做任何文字編輯。我知道我總是可以像添加任何其他文件一樣添加它,但這會在項目文件夾中創建文件的副本,並且不會將其鏈接到外部。

回答

2

你可以在你的解決方案目錄中的某個位置添加一個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緩存,直到解決方案關閉。