简体   繁体   中英

New .csproj format - How to specify entire directory as “linked file” to a subdirectory?

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?

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.

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>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM