11

アンマネージ DLL をコンソール プロジェクトに埋め込もうとしています。プロジェクトのデフォルトの名前空間はCompany.Project1Exe. アセンブリ名 (出力 exe ) の名前はproject1.exe

Add as Linkdll は、オプションを使用してプロジェクトに追加され、Libs\x86サブフォルダーに配置されます。

Company.Project1Exe
   |
   |--Program.cs
   |--Libs
       |--x86
           |-My1st.dll
           |-My2nd.dll  

Add as Linkこれらはオプションを使用してプロジェクトに追加されているため、Libsサブフォルダーに物理的に配置されていません。

これら両方の dll のビルド アクションを「埋め込みリソース」に設定しました。

既定では、MSBuild は、プロジェクトのディレクトリ構造を表すを使用しDefaultNamspace.ExtendedNamespace.FileNameてこれらの dll を埋め込みます。ExtendedNamespace

Company.Project1.Libs.x86.My1st.dllこれにより、リソースがそれぞれおよびとして埋め込まれCompany.Project1.Libs.x86.My2nd.dllます。

アセンブリ名を使用してこれらのリソースを埋め込みProject1.Libs.x86.My1st.dllProject1.Libs.x86.My2nd.dllそれぞれとして埋め込まれます。

これどうやってするの?

4

1 に答える 1

17

この問題に対処できる 1 つの方法LogicalNameは、埋め込みリソースの を設定することです。デフォルトでは、リソースを埋め込むと、csproj ファイルに次のようなエントリが見つかります。

<EmbeddedResource Include="path to embdedded resource"/>

を使用して追加されたリソースの場合Add as Link、追加のLink属性があります。この場合、Link属性はプロジェクト構造に関連するリソースのパスであり、Include属性はマシン上のファイルの場所を指す (プロジェクトに関連する) ことです。

<EmbeddedResource Include="path to embdedded resource"/>
  <Link>Libs\x86\My1st.dll</Link>
</EmbeddedResource>

別の名前空間を使用してアセンブリを埋め込むには、LogicalName属性を上記に追加して、デフォルトの msbuild 動作をオーバーライドできます。

<EmbeddedResource Include="path to embdedded resource"/>
  <Link>Libs\x86\My1st.dll</Link>
  <LogicalName>$(TargetName).Libs.x86.My1st.dll</LogicalName>
</EmbeddedResource>

思われる欠点は、追加されたすべてのリソースに対してこれを行う必要があることです。ただし、これがプロジェクトに任意のリソースを埋め込むデフォルトの方法になるように、この規則を何らかの方法で設定することをお勧めします。つまり$(TargetName)、デフォルトの名前空間の代わりに を使用します。

于 2012-05-23T06:09:38.413 に答える