新的.csproj格式 - 如何将整个目录指定为“链接文件”到子目录?

时间:2017-08-21 15:19:41

标签: c# msbuild visual-studio-2017 csproj .net-standard

使用新的.csproj格式(以及旧格式),可以将文件添加为项目文件夹之外的链接:

 <EmbeddedResource Include="..\..\..\Demo\Sample.cs" Link="Resources\Sample.cs" />

也可以使用glob模式来包含多个文件:

<EmbeddedResource Include="..\..\..\Demo\*.cs" />

但你如何将两者合并?

我尝试了什么

  1. <EmbeddedResource Include="..\..\..\Demo\*.cs" Link="Resources\*.cs" />
  2. <EmbeddedResource Include="..\..\..\Demo\*.cs" Link="Resources\*" />
  3. <EmbeddedResource Include="..\..\..\Demo\*.cs" Link="Resources\" />
  4. 前两个只创建一个链接文件(分别名称为*.cs*)。第三个就是错误。

    有没有办法将globbing和链接文件组合到目标项目中的特定位置?如果没有,我如何链接目录中的所有文件而不知道他们的名字有多少或者是什么?

2 个答案:

答案 0 :(得分:9)

虽然以前可以在使用glob扩展(%(RecursiveDir))时使用Link="Resources\%(RecursiveDir)%(Filename)%(Extension)"元数据,但2.0.0版本的.NET Core SDK允许使用新的LinkBase元数据:

<EmbeddedResource Include="..\..\..\Demo\**\*.cs" LinkBase="Resources" />

请注意,除了最近发布的VS 2017 15.3之外,您还需要安装2.0.0(并确保没有global.json选择较低版本)。

它引入了this pull request,这可能是目前最好的文档。

答案 1 :(得分:1)

我得到了这个工作(将外部目录中的所有svg文件链接到解决方案子文件夹),并提供了来自此site的提示。只有%(Parent.Filename)对我不起作用(得到CS1508),所以我用%(Filename)%(Extension)替换。

<ItemGroup>
    <Parent Include="C:\Path\To\My\SVG\Dir\*.svg" />
    <EmbeddedResource Include="@(Parent)">
        <Link>Resources\%(Filename)%(Extension)</Link>
    </EmbeddedResource>
</ItemGroup>