新しい.csproj
形式(および古い形式)を使用すると、プロジェクトフォルダーの外部にリンクされたファイルを追加できます。
<EmbeddedResource Include="..\..\..\Demo\Sample.cs" Link="Resources\Sample.cs" />
グロブパターンを使用して複数のファイルを含めることもできます。
<EmbeddedResource Include="..\..\..\Demo\*.cs" />
しかし、どのように2つを組み合わせるのですか?
<EmbeddedResource Include="..\..\..\Demo\*.cs" Link="Resources\*.cs" />
<EmbeddedResource Include="..\..\..\Demo\*.cs" Link="Resources\*" />
<EmbeddedResource Include="..\..\..\Demo\*.cs" Link="Resources\" />
最初の2つは、単一のリンクファイル(それぞれ正確に*.cs
および*
という名前)を作成するだけです。 3番目は単にエラーになります。
ターゲットプロジェクトの特定の場所にリンクされたファイルとグロブを組み合わせる方法はありますか?そうでない場合、ディレクトリ内のすべてのファイルを、それらの名前がいくつあるか、または何であるかを知らずにリンクするにはどうすればよいですか?
これは、以前はglob拡張(%(RecursiveDir)
)を使用するときにLink="Resources\%(RecursiveDir)%(Filename)%(Extension)"
メタデータを使用して可能でしたが、.NET CoreSDKの2.0.0バージョンでは新しいLinkBase
メタデータ:
<EmbeddedResource Include="..\..\..\Demo\**\*.cs" LinkBase="Resources" />
最近リリースされたVS2017 15.3に加えて2.0.0をインストールする必要があることに注意してください(また、global.json
が下位バージョンを選択しないようにしてください)。
このプルリクエスト で導入されました。これはおそらく現時点で最高のドキュメントです。
この site からのヒントを使用して、これを機能させました(外部ディレクトリ内のすべてのsvgファイルをsolution-subfolderにリンクします)。 %(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>