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

Nig*_*888 11 c# msbuild csproj visual-studio-2017 .net-standard

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

 <EmbeddedResource Include="..\..\..\Demo\Sample.cs" Link="Resources\Sample.cs" />
Run Code Online (Sandbox Code Playgroud)

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

<EmbeddedResource Include="..\..\..\Demo\*.cs" />
Run Code Online (Sandbox Code Playgroud)

但是你如何将两者结合起来呢?

我试过的

  1. <EmbeddedResource Include="..\..\..\Demo\*.cs" Link="Resources\*.cs" />
  2. <EmbeddedResource Include="..\..\..\Demo\*.cs" Link="Resources\*" />
  3. <EmbeddedResource Include="..\..\..\Demo\*.cs" Link="Resources\" />

前两种只能创建一个链接文件(名称完全*.cs*分别).第三个只是出错了.

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

Mar*_*ich 15

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

<EmbeddedResource Include="..\..\..\Demo\**\*.cs" LinkBase="Resources" />
Run Code Online (Sandbox Code Playgroud)

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

它引入了这个拉取请求,这可能是目前最好的文档.


fre*_*uin 6

我得到了这个工作对我来说(将外部目录中的所有 svg 文件链接到解决方案子文件夹),并有来自此站点的提示。只是%(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>
Run Code Online (Sandbox Code Playgroud)