У нас есть несколько автоматически сгенерированных файлов ресурсов в нашем проекте в Visual Studio 2008 с некоторыми локализованными версиями, и в одной из этих локализованных версий есть строка, которая в данном случае пуста.
Более явно. У нас есть файл основных ресурсов с большим количеством строковых ресурсов. Затем у нас есть 4 другие локализованные версии этого файла, и в одном из этих других локализованных файлов одна из строк получает пустое значение.
Проблема теперь в том, что дизайнер форм очень доволен тем, что нашел ресурс для строки, и, очевидно, не остановится на повторном использовании этого ресурса для любых пустых строк, он назначит свойство в сгенерированном коде конструктора для формы .
Например, если по какой-то причине свойство в элементе управления не указано со значением по умолчанию (поэтому оно будет сериализовано в код, даже если оно пустое), тогда оно будет ссылаться на наш ресурс, а не записывать пустую строку литерал в коде C #.
Проблема в том, что он ссылается на локализованные версии, а они не скомпилированы в код.
Вот пример сокращенного кода:
this.rpAllFields.KeyTip =
global::namespaces.SystemMessagesResources_sv_SE.
dash_red_shift_info_description;
В этом случае dash_red_shift_info_description
не имеет значения для локали sv-SE, поэтому дизайнер, увидев в коде пустую строку, попытается связаться с этим ресурсом. Но SystemMessagesResources_sv_SE не является существующим классом, а, по-видимому, сгенерированным именем класса для шведской локализованной версии файла ресурсов SystemMessagesResources, который скомпилирован в класс.
Можно ли этого избежать? Мы довольно устали от поиска / замены каждый раз, когда что-то меняем в файлах форм, и мы почти уверены, что мы сделали что-то пощечину, чтобы это произошло, но мы очевидно, не в состоянии найти причину этого сами.
Код выше, если мы удалим ресурс, будет выглядеть так:
this.rpAllFields.KeyTip = "";