web-dev-qa-db-ja.com

新しい.csproj形式-ディレクトリ全体をサブディレクトリへの「リンクファイル」として指定するにはどうすればよいですか?

新しい.csproj形式(および古い形式)を使用すると、プロジェクトフォルダーの外部にリンクされたファイルを追加できます。

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

グロブパターンを使用して複数のファイルを含めることもできます。

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

しかし、どのように2つを組み合わせるのですか?

私が試したこと

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

最初の2つは、単一のリンクファイル(それぞれ正確に*.csおよび*という名前)を作成するだけです。 3番目は単にエラーになります。

ターゲットプロジェクトの特定の場所にリンクされたファイルとグロブを組み合わせる方法はありますか?そうでない場合、ディレクトリ内のすべてのファイルを、それらの名前がいくつあるか、または何であるかを知らずにリンクするにはどうすればよいですか?

12
NightOwl888

これは、以前は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が下位バージョンを選択しないようにしてください)。

このプルリクエスト で導入されました。これはおそらく現時点で最高のドキュメントです。

15
Martin Ullrich

この 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>
1
freakinpenguin