Дизайнер заставляет ресурсы внедряться в форму, а не использовать Resources.resx? - PullRequest
3 голосов
/ 21 октября 2011

Эта проблема заставила меня почесать голову!Я постараюсь быть как можно более кратким.

На высоком уровне:

Проблема в том, что, хотя проект работает нормально, и код выглядит хорошо для меня,Всякий раз, когда я редактирую и создаю определенные формы, Visual Studio перезаписывает файлы *.Designer.cs очень нежелательным образом.

Я совершенно уверен, что эти *.Designer.cs файлы не редактировались (особенно автоматически сгенерированная часть) в прошлом.

Более подробно:

В нашем проекте используются пользовательские элементы управления, некоторые из которых наследуются от PictureBox.На формах, где присутствуют эти элементы управления, если я просматриваю файл *.Designer.cs, я либо вижу, что свойство Image не установлено, либо свойство Image относится к изображению, сохраненному в файле resx проекта, как показано ниже,что все хорошо.

this.customButton.Image = global::MyProject.Properties.Resources.buttonImage;

Однако, если я просто изменю эту форму, добавив еще один элемент управления (перетащите другую кнопку на форму) и соберу проект, Visual Studio подробно отредактирует MyForm.Designer.cs иMyForm.resx файлов, даже для существующих элементов управления в форме, которые не были затронуты.Кажется, что он встраивает все изображения, необходимые элементам управления в файл MyForm.resx, а затем обращается к ним в MyForm.Designer.cs следующим образом:

System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MyForm));
this.customButton.Image = ((System.Drawing.Image)(resources.GetObject("customButton.Image")));

Это явно не то, что я хочу.Почему Visual Studio хочет, чтобы форма теперь использовала локальный ресурс, а не тот, который встроен в файл Resources.resx проекта, как это было радостно до изменения формы?Если я захожу в дизайнер, просматриваю свойства customButton и пытаюсь установить свойство Image для изображения в файле ресурсов проекта, оно позволяет это, но при следующем щелчке оно немедленно вернется к локальномуссылка встроена в MyForm.resx.

Есть идеи, почему это происходит?

1 Ответ

3 голосов
/ 24 октября 2011

Я понял это с помощью другого вопроса

По сути, хотя я видел несколько рекомендаций по централизации ресурсов вашего приложения в одной сборке, похоже, этоплохой выбор.Дизайнеру VS просто не нравится иметь доступ к ресурсам, внешним по отношению к текущей сборке, и, хотя он может это делать, он также изменит ваш код, чтобы добавить эти ресурсы в текущую сборку, встраивая их, мешая вашим усилиям сохранить ресурсы водна сборка.

Мне пришлось вернуться к хранению ресурсов в сборке, которые их используют.

...