【问题标题】:Link Additional Files in Visual Studio在 Visual Studio 中链接其他文件
【发布时间】:2017-06-07 22:08:24
【问题描述】:

我正在尝试在 Visual Studio 2017 上的 C# 项目中包含 stylecop.json。我已经通过在任何文本编辑器中修改 .csproj 想出了如何做到这一点:

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

我想知道是否有一种方法可以在不进行任何文本编辑的情况下做到这一点。我知道我总是可以像添加任何其他文件一样添加它,但这会在项目文件夹中复制文件而不是外部链接。

【问题讨论】:

    标签: visual-studio csproj


    【解决方案1】:

    您可以在解决方案目录的某处添加Directory.Build.targets 文件(将应用于该目录下的所有项目),内容如下:

    <Project>
      <ItemGroup>
        <AdditionalFiles Update="@(AdditionalFiles)">
          <Link Condition="'%(Link)' == ''">%(Identity)</Link>
       </AdditionalFiles>
      </ItemGroup>
    </Project>
    

    请注意,此处使用 %(Identity) 对于“项目锥”之外的项目不是最佳选择 - 例如。当你有&lt;AdditionalFiles Include="..\..\foo.bar" /&gt;。为此,您可以使用类似于 VS 2017 15.3 / .net core 2.0 工具中的 SDK-based projects will do 的机制:

    <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 缓存,直到解决方案关闭。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      • 2012-04-25
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多