В Visual Studio 2010 отсутствует встроенный ресурс, когда имя оканчивается на «No.xxx» - PullRequest
5 голосов
/ 11 августа 2010

Я столкнулся со странным поведением в Visual Studio 2010.

При использовании встроенных ресурсов (файлов, которые добавляются в мой проект C # и для которых установлено свойство Build Action Embedded Resource), файлы включаются в выходную сборку в виде двоичных данных.Перечислить ресурсы просто:

class Program
{
    static void Main(string[] args)
    {
        string[] names = typeof (Program).Assembly.GetManifestResourceNames ();

        foreach (var name in names)
        {
            System.Console.Out.WriteLine (name);
        }
    }
}

Однако, если имя файла встроенного ресурса заканчивается на No.xxx (расширение не имеет значения), файл не отображается в списке.Я не могу понять причину, почему Visual Studio 2010 не будет включать такой файл.Что я упустил?

Примечание: если я переименую файл встроенного ресурса в обозревателе решений во что-то другое, то все будет работать, как и ожидалось.

1 Ответ

6 голосов
/ 01 сентября 2010

Дан из команды Microsoft Connect наконец-то предоставил правильное объяснение для такого поведения:

Здравствуйте, спасибо за отчет, это на самом делеработает нормально.Причина в том, что любые файлы resx, имена которых соответствуют шаблону .VALIDCULTURE.resx, предполагаются специфическими для этой культуры.(Это работает с VS2002, к лучшему или к худшему). В вашем случае "no" является допустимой культурой ( Norwegian , я полагаю), поэтому процесс сборки встраивает ее в спутниковую сборку.Вот что я получил, когда попробовал это.Обратите внимание на подпапку "no".Если в вашем приложении вы измените свою текущую культуру на норвежскую, загрузка ресурсов будет загружать этот набор ресурсов.

Таким образом, проблема не имеет ничего общего с самим словом No, а скорее сфакт, что это действительное, двухбуквенное, культурное название (в моем случае норвежское).Я проверил, и действительно, в bin\Debug была подпапка с именем No, в которой содержалась спутниковая сборка с именем Project.resources.dll.

Переименование ресурса заканчивалось .EN.xxx или .FR.xxx, конечно, демонстрирует такое же поведение.

...