2016-09-13 26 views
2

VS2015 .NET 4.6.1プロジェクトでは、ビルドアクションが '組み込みリソース'に設定され、名前が次のように設定されたデータリソースファイルがあります。ファイル名に基づいて埋め込みリソースファイルのカルチャが設定されないようにするには

myDataFile.bin.zip 

残念ながら、 'bin'はWindows 10マシンに存在するロケールで、ファイルがデフォルトのものではなく特定のロケールのリソースとして識別されています(Visual Studioではファイルロケールに固有のものとして<name>.<locale>.<ext>の形式で名前が付けられています)、サテライトアセンブリが作成されます。

これは内蔵されたときに、私は2つのアセンブリを取得することを意味します

myproject.dll 
bin\myproject.resources.dll 

私は、ファイルは、プロジェクトのアセンブリではなく、サテライトアセンブリに含まれるようにしたいです。

ファイル名を変更せずに、これは可能ですか?

ありがとうございます!

答えて

3

この動作は、Microsoft.Common.CurrentVersion.targets(C:¥Program Files(x86)¥MSBuild¥14.0¥Binにあります)とMicrosoft.Build.Tasks.AssignCultureクラスのSplitResourcesByCultureビルドターゲットによって実装されています。私はソースコードを調べましたが、 "bin"がカルチャ名として誤って解釈されないように切り替えることができる簡単なスイッチは見つかりませんでした。実際、C#プロジェクトの場合、組み込みリソースが同じ名前の.csファイルに依存している場合、ファイル名はのままです()。だから、

、標準のビルドターゲットを書き換えるの短い、あなたは、単純な(少しハックする場合)の回避策があります。myDataFile.bin.zipが配置されているフォルダに

  1. を、プロジェクトに空を追加myDataFile.bin.csという名前のC#コードファイル。 この名前は、埋め込みリソースの名前と正確に一致する必要があります。最後の拡張子(.zipではなく.cs)を除き、です。あなたは完全に空のファイルを残すことができるか、何が起こっているかを説明するコメントを追加することができます

    // This source file prevents the nested myDataFile.bin.zip file from being treated as 
    // a resource for the "bin" culture. 
    
  2. は、プロジェクトを保存します。 (。、プロジェクトファイルが保存されますを確認し、ファイル»すべてを保存]をクリックします)

  3. テキストエディタで開き.csprojプロジェクトファイルとmyDataFile.bin.zipため<EmbeddedResource>要素を探します。

    <EmbeddedResource Include="myDataFile.bin.zip" /> 
    
  4. は、C#のコードファイルを参照する子<DependentUpon>要素を挿入:

    <EmbeddedResource Include="myDataFile.bin.zip"> 
        <DependentUpon>myDataFile.bin.cs</DependentUpon> 
    </EmbeddedResource> 
    
  5. 保存プロジェクトファイルをし、Visual Studioでプロジェクトをリロードします。

  6. myDataFile.bin.zipがmyDataFile.bin.csの下にネストされていることをソリューションエクスプローラで視覚的に確認します。

  7. プロジェクトをビルドします。リソースは、サテライトアセンブリの代わりにメインアセンブリに埋め込まれました。

関連する問題