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
<EmbeddedResource Include="..\..\..\Demo\*.cs" Link="Resources\*.cs" />
<EmbeddedResource Include="..\..\..\Demo\*.cs" Link="Resources\*" />
<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?
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)
.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 newLinkBase
metadata: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.