2016-09-13 12 views
2

В проекте VS2015 .NET 4.6.1 у меня есть файл ресурсов данных с установкой Build Action для «Embedded Resource» и именем следующим образом:Как предотвратить интеграцию культуры встроенных ресурсов в соответствии с ее именем файла

myDataFile.bin.zip 

к сожалению «бин» является языком, который присутствует на моем Windows 10 машины, которая вызывает файл, который будет определена в качестве ресурса для определенного региона, а не один по умолчанию (Visual Studio, кажется, распознал файлы названный в формате <name>.<locale>.<ext> как относящийся к языку), в результате чего создается сборка спутника.

Это означает, что, когда построили, я получаю две сборки:

myproject.dll 
bin\myproject.resources.dll 

Я хочу, чтобы файл был включен в сборку проекта, а не в спутниковой сборки.

Без изменения имени файла, возможно ли это?

Спасибо!

ответ

3

Это поведение реализуется целью сборки SplitResourcesByCulture в Microsoft.Common.CurrentVersion.targets (находится в папке C: \ Program Files (x86) \ MSBuild \ 14.0 \ Bin) и классе Microsoft.Build.Tasks.AssignCulture. Я посмотрел на исходный код, но я не нашел простой переключатель, который вы можете переключить, чтобы предотвратить «неправильное использование bin» как имя культуры. На самом деле, для проекта C# имя файла остается только только, когда встроенный ресурс «зависит от» файла с похожими именами .cs.

Итак, короткие переписывания стандартных целей сборки, у вас есть простой (если немного Hacky) обходной путь:

  1. В папке, где находится myDataFile.bin.zip, добавьте к проекту пустому Код файла C# с именем myDataFile.bin.cs. Это имя должно совпадать с именем вашего встроенного ресурса точно, за исключением окончательного расширения (.cs вместо .zip). Вы можете оставить файл полностью пустой, или вы можете добавить комментарий, объясняющий, что происходит:

    // This source file prevents the nested myDataFile.bin.zip file from being treated as 
    // a resource for the "bin" culture. 
    
  2. Сохранить проект. (Чтобы файл проекта будет сохранен, нажмите File »Save All.)

  3. Открыть файл .csproj проекта в текстовом редакторе и найдите <EmbeddedResource> элемент для myDataFile.bin.zip:

    <EmbeddedResource Include="myDataFile.bin.zip" /> 
    
  4. Вставьте дочерний <DependentUpon> элемент, который ссылается на файл # код C:

    <EmbeddedResource Include="myDataFile.bin.zip"> 
        <DependentUpon>myDataFile.bin.cs</DependentUpon> 
    </EmbeddedResource> 
    
  5. Сохраните файл проекта и загрузить проект в Visual Studio.

  6. Визуально подтвердить в Обозревателе решений, что myDataFile.bin.zip вложен в myDataFile.bin.cs.

  7. Постройте проект. Ваш ресурс теперь встроен в основную сборку вместо сборки спутника.