2017-05-30 4 views
0

C#プロジェクトでは、デフォルトでEmbedded Resourceの生成されたリソース名には、名前付けされた有効な言語識別子となるように、ある程度マングリングが行われます。埋め込みリソースの生成されたManifestResourceNameを変更する方法

たとえば、Foo/Bar/123.txt{Default Namespace}.Foo.Bar._123.txtになり、asm.GetManifestResourceStream("Yuck.Foo.Bar._123.txt")でロードする必要があります。

asm.GetManifestResourceStream("Foo/Bar/123.txt")のようにロードすることができるので、仮想ファイルシステムをよりよくシミュレートするために、私のリソースにはFoo/Bar/123.txtのような相対パスを保持する方がはるかに簡単です。

私は、.Netはリソース名に制限を設けていないことがわかっているので、実現可能なようです。

しかし、ビルドエンジンでわかりやすいパス名を生成するにはどうすればよいですか?

答えて

0

.csprojファイルでは、Embedded Resources<EmbeddedResource>と定義されています。

メタデータの名前は<LogicalName>で、リソースの名前を上書きすることができます。例えば

<ItemGroup> 
    <EmbeddedResource Include="Foo\Bar\123.txt"> 
    <LogicalName>Foo\Bar\123.txt</LogicalName> 
    </EmbeddedResource> 
</ItemGroup> 

は、私たちの埋め込みリソースのすべてのためにこれを行うにはasm.GetManifestResourceStream("Foo\Bar\123.txt")

を使用してロードすることができ、リソースを生成するであろう、私たちはどの.csprojファイルに名前変更タスクを追加することができますデフォルトの名前が生成される前に実行され、選択した名前が明示的に割り当てられます。

<Target Name="ModifyEmbeddedResourceNames" BeforeTargets="CreateManifestResourceNames"> 
    <ItemGroup> 
    <EmbeddedResource> 
     <LogicalName>%(EmbeddedResource.Identity)</LogicalName> 
    </EmbeddedResource> 
    </ItemGroup> 
</Target> 

彼らのIdentity

関連する問題