Как использовать файл общих ресурсов между проектами в одном решении? - PullRequest
17 голосов
/ 22 октября 2010

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

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

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

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

Ответы [ 5 ]

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

Solution Explorer, showing an example solution, which contains a project named *Resources*

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

For example, the Resources project's Resources tab shows a picture of a puppy, and the Solution Explorer shows that the Resources project's Resources folder includes the picture of the puppy

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

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

In the *Add Existing Item* dialog, choose the *Add As Link* option from the *Add* button's drop-down list

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

In Solution Explorer, the Main project's icon for the puppy Resource has an arrow on the icon, whereas the Resources project's icon for the puppy Resource does not have an arrow on the icon

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

In Solution Explorer, change the *Main* project's puppy resource's properties. Choose a Build Action of *None*

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

Drag the linked image from the Solution Explorer's *Main* project's resources to the *Main* project's resources tab's viewing pane

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

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

Это не сработало для меня, и я нашел другой (VS2015 +) подход.См. https://stackoverflow.com/a/45471284/4151626

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

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

1 голос
/ 22 октября 2010

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

Solution 'Sample'
   Project Sample.Data
   Project Sample.Business
   Project Sample.UI
   Project Sample.Resource   //shared resources are put in a shared project  
1 голос
/ 22 октября 2010

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

windows:

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.
0 голосов
/ 19 мая 2011

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

...