Как автоматически скопировать встроенные ресурсы из библиотеки классов, на которую ссылается другая библиотека классов? - PullRequest
3 голосов
/ 26 марта 2010

Вот моя структура проекта:

  • Проект веб-приложения
    • Имеет ссылку на проект библиотеки классов 1 в том же решении Visual Studio 2008
  • Библиотека классов 1
    • Имеет ссылку на проект библиотеки классов 2 в том же решении
  • Библиотека классов 2
    • Имеет файл, помеченный как Действие сборки: встроенный ресурс и копирование в выходной каталог: всегда копировать

Вот моя проблема:

Когда я создаю свой проект веб-приложения, встроенный ресурс в библиотеке классов 2 НЕ копируется в каталог bin проекта веб-приложения, как это должно быть. Если я добавлю ссылку на проект непосредственно из моего проекта веб-приложения в библиотеку классов 2, файл будет скопирован в каталог bin.

Как получить файл встроенного ресурса для копирования без добавления ненужной ссылки?

1 Ответ

11 голосов
/ 26 марта 2010

Я думаю, вам нужно пометить его Содержимое + Копировать всегда.

Подробнее о различных свойствах файла Visual Studio см. На этой странице .


Обновление 1

Попробуйте создать ссылку на файл в проекте веб-приложения. Вы можете сделать это ...

  1. Щелкните правой кнопкой мыши свой веб-проект (или папку внутри него), используя Solution Explorer
  2. Выберите Добавить> Существующий элемент
  3. Перейдите к своему файлу и выберите его
  4. Нажмите на маленькую стрелку справа от кнопки Добавить и выберите Добавить как ссылку

Обновление 2

Использование Content / Copy Всегда для любого файла в проекте библиотеки, на который есть ссылка, это должно привести к тому, что файл будет скопирован в папку bin основного проекта. Если файл находится в папке, он будет находиться в этой папке в папке bin.

Убедитесь, что если вы делаете сборку Release, вы ищете bin / Release, а если вы делаете сборку Debug, вы смотрите в bin / Debug.

Также попробуйте сделать Rebuild All.


Обновление 3

Теперь я понимаю, что вы говорите. Когда вы ссылаетесь на библиотеку DLL, которая отсутствует в вашем решении , вы only ссылаетесь на DLL, а не на что-либо еще, находящееся в этом проекте.

Итак, я думаю, вам нужно будет выполнить одно из следующих действий ...

  1. Включить этот проект в ваше решение
  2. Ссылка на файл (как в обновлении 1)
  3. Создайте новый проект с именем что-то вроде MyLibraryContentFiles, в котором есть только файлы содержимого проекта библиотеки, но не код, и включите этот проект в свое решение. Вы можете обнаружить, что в любом случае выгодно отделять файлы содержимого от кода.
  4. Встраивайте любые файлы, которые вам нужны, в библиотечный проект (DLL) (используя Embedded Resource), затем предоставьте свойство для открытого класса, которое предоставляет некоторый интерфейс для ссылки на файл. Если это файл изображения, вы можете вернуть объект Image. Если это текстовый файл, вы можете вернуть простой string.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...