Как использовать файл общего ресурса между проектами в одном решении?

У меня проблема с файлами ресурсов.

У меня есть решение с двумя проектами. Первый проект содержит ImageResource.resx файл с изображениями, которые я использую. каждый Form В этом проекте можно получить доступ к этому файлу от дизайнера. Но я вижу в конструкторе ImageResource.resx файл для использования из второго проекта (ссылка на второй проект присутствует).

Я добавил ImageResource.resx файл как ссылка на мой второй проект. И я видел это в конструкторе! Но когда я использую изображение из этого ресурса во втором проекте, Visual Studio изменил мой исходный файл (он устанавливает пространства имен и другие...), и мое решение обрывается. Также Visual Studio говорит мне, что ImageResource.resx присутствует в двух DLL first_project.dll а также second_project.dll

Кто-нибудь может мне помочь Как правильно использовать общие ресурсы между проектами?

5 ответов

Решение
  1. Правильный способ совместного использования ресурсов - создать глобальный общий проект. Создайте новый проект с именем Resources:

Обозреватель решений, показывающий пример решения, который содержит проект с именем * Resources

  1. Затем мы должны добавить некоторые ресурсы (например, значки) в проект. Делай это как обычно. Перейдите в настройки проекта, выберите вкладку " Ресурсы" и " Добавить существующий файл…" в проект. Мы видим, что значок добавлен в проект и скопирован в локальную папку:

Например, вкладка 'Ресурсы' проекта 'Ресурсы' показывает изображение щенка, а 'Обозреватель решений' показывает, что в папке 'Ресурсы' проекта 'Ресурсы' содержится изображение щенка.

  1. Следующий шаг состоит в добавлении этого значка в другой проект (ы). Обратите внимание на важное отличие, вам нужно добавить этот значок в виде ссылки!

    Добавление в качестве ссылки позволяет избежать дублирования ресурсов. Создайте новый проект в том же решении и назовите его, например, Main. Создайте некоторую папку в этом новом проекте, назвав ее " Ресурсы" (логическое название для нашей цели). Затем щелкните правой кнопкой мыши эту папку, выберите " Добавить существующий элемент" и выберите файл изображения из общей папки проекта. Обязательно используйте Добавить как ссылку здесь! Если все сделано правильно, иконка вновь добавленного файла будет выглядеть немного иначе (см. Ниже):

В диалоговом окне * Добавить существующий элемент * выберите параметр * Добавить как ссылку * в раскрывающемся списке кнопки * Добавить

Значок добавленного ресурса должен выглядеть следующим образом

В обозревателе решений значок основного проекта для ресурса щенка имеет стрелку на значке, в то время как значок проекта ресурса для ресурса щенка не имеет стрелки на значке

  1. Теперь мы должны установить действие сборки для этого файла None. Для этого выберите файл и перейдите в окно свойств. Там выберите None для Build Action. Нам нужно сделать это, чтобы избежать встраивания этого значка в сборку:

В обозревателе решений измените свойства ресурса проекта * Main * puppy. Выберите действие по сборке * Нет

  1. Наконец, нам нужно добавить связанные файлы в ресурсы соответствующего проекта. Откройте Свойства проекта для проекта, в который мы только что добавили файлы. Выберите вкладку Resource и перетащите туда связанный файл:

Перетащите связанное изображение из ресурсов * Main * проекта Solution Explorer на панель просмотра вкладки ресурсов * Main * проекта

Это пять простых шагов, которые вы должны выполнить, чтобы поделиться значками между проектами. Вы можете спросить: "Каковы преимущества этого?" Преимущества:

  • Мы храним ресурсы в одном месте, и
  • Значок легко заменить на новый.

Это не сработало для меня, и я нашел другой (VS2015+) подход. См. /questions/28285907/problema-s-obschimi-resursami-winforms-mezhdu-proektami-v-visual-studio/28285911#28285911

Короче говоря, общий проект напрямую включен в периферийный проект. Таким образом, хотя IDE не поддерживает <Resource> элементы в общем проекте. <Resource> элементы могут быть добавлены в общий проект с помощью текстового редактора. Затем они включаются в периферийный проект во время сборки.

(Извиняюсь за гиперссылку. Я бы просто опубликовал ответ для ясности, но редакторы stackru решают эту проблему, удаляя дубликаты ответов, чтобы спасти вас от???.)

Если файл ресурса действительно используется несколькими проектами, вы должны поместить его в общий проект.

Solution 'Sample'
   Project Sample.Data
   Project Sample.Business
   Project Sample.UI
   Project Sample.Resource   //shared resources are put in a shared project  

Можете ли вы использовать символическую ссылку, чтобы поделиться файлом в нескольких папках?

окна:

mklink linked_location\ImageResource.resx original_location\ImageResource.resx


C:\Users\preet>mklink
Creates a symbolic link.

MKLINK [[/D] | [/H] | [/J]] Link Target

        /D      Creates a directory symbolic link.  Default is a file
                symbolic link.
        /H      Creates a hard link instead of a symbolic link.
        /J      Creates a Directory Junction.
        Link    specifies the new symbolic link name.
        Target  specifies the path (relative or absolute) that the new link
                refers to.

Вы не можете видеть ресурс, если он не является общедоступным, и для него по умолчанию установлено значение "Друг". Вы можете установить "Модификатор доступа" в Visual Designer (верхний правый угол).

Другие вопросы по тегам