New .csproj format - How to specify entire directo

2020-02-10 04:10发布

With the new .csproj format (as well as the old), it is possible to add files as linked outside of the project folder:

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

It is also possible to use a glob pattern to include multiple files:

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

But how do you combine the two?

What I Tried

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

The first two only create a single linked file (with exactly the name *.cs and * respectively). The third simply errors out.

Is there a way to combine globbing with linked files to a specific location in the target project? If not, how can I link all the files in a directory without knowing how many or what their names are?

2条回答
爷的心禁止访问
2楼-- · 2020-02-10 05:02

I got this working for me (linking all svg-files in an external dir to a solution-subfolder) with a hint from this site. Only the %(Parent.Filename) didn't work for me (got a CS1508), so I replaced with %(Filename)%(Extension).

<ItemGroup>
    <Parent Include="C:\Path\To\My\SVG\Dir\*.svg" />
    <EmbeddedResource Include="@(Parent)">
        <Link>Resources\%(Filename)%(Extension)</Link>
    </EmbeddedResource>
</ItemGroup>
查看更多
Melony?
3楼-- · 2020-02-10 05:04

While this was previously possible using the %(RecursiveDir) metadata when using glob expansion ( Link="Resources\%(RecursiveDir)%(Filename)%(Extension)"), the 2.0.0 version of the .NET Core SDK allows the use of a new LinkBase metadata:

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

Note that you need to install the 2.0.0 in addition to the recently released VS 2017 15.3 (and ensure no global.json selects a lower version).

It was introduced with this pull request which is probably the best documentation at the moment.

查看更多
登录 后发表回答