Справочная информация по сборке Visual Studio 2010 - PullRequest
2 голосов
/ 09 ноября 2011

Я использую Visual Studio 2010 и C # для создания приложений WinForms и библиотек классов. У меня есть несколько общих библиотек, которые я использую для всех продуктов, а затем некоторые библиотеки для своих приложений. Ни одна из моих сборок не GAC'd. Все проекты копируют свои выходные данные из соответствующей папки bin \ Debug в общую папку репозитория, и все ссылки на сборки указывают на эту папку репозитория.

Например, Common.DAL.dll, Common.BLL.dll, Product.DAL.dll, Product.BLL и Product.exe

Ссылки между сборками обычно выглядят примерно так:

  • Product.exe содержит ссылку на Product.BLL
  • Product.BLL содержит ссылки на Common.BLL и Product.DAL
  • Product.DAL включает ссылку на Common.DAL
  • Common.BLL включает ссылку на Common.DAL

Когда все они включены в одно и то же решение, зависимости сборки выглядят примерно так:

  • Common.BLL зависит от Common.DAL
  • Product.DAL зависит от Common.DAL
  • Product.BLL зависит от Common.BLL и Product.DAL
  • Product.exe зависит от Product.BLL

Что делает порядок сборки примерно таким:

  1. Common.DAL
  2. Common.BLL
  3. Product.DAL
  4. Product.BLL
  5. Product.exe

Часто при попытке запустить приложение я получаю следующую ошибку:

Не удалось загрузить файл или сборку 'Common.DAL, версия = 1.0.0.0, Culture = нейтральный, PublicKeyToken = 4e5249f2e70e1da8' или одна из его зависимостей. Система не может найти указанный файл.

Я отследил проблему до того факта, что не все сборки, построенные из решения, попадают в папку bin \ Debug Product.exe.

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

  • Common.DAL \ bin \ Debug содержит Common.DAL.dll
  • Common.BLL \ bin \ Debug содержит Common.BLL.dll и Common.DAL.dll
  • Product.DAL \ bin \ Debug содержит Common.DAL.dll и Product.DAL.dll
  • Product.BLL \ bin \ Debug содержит Common.BLL.dll, Common.DAL.dll, Product.BLL.dll и Product.DAL.dll
  • но Product.exe \ bin \ Debug содержит только Product.exe, Product.BLL и Product.DAL. Отсутствуют общие сборки . Поэтому, когда я бегу Product.exe, я получаю ошибку, указанную выше.

Я проверил свойства всех своих проектов и свойств. Все они используют .NET Framework 4. Для всех ссылок на мои сборки свойство «Определенная версия» имеет значение false, а свойство «Копировать локально» - значение true.

Я могу заставить отсутствующие сборки скопировать в Product.exe \ bin \ Debug, добавив ссылки на Общие сборки в проекте Product.exe, но поскольку Product.exe не явно используйте общие сборки, это больше похоже на клудж, чем на решение.

Я просмотрел документацию по MSDN и Visual Studio, чтобы узнать, смогу ли я выяснить, что влияет или влияет на копирование ссылочных сборок, и я искал в SO похожие проблемы, но не нашел ничего полезного.

Я не знаю, куда идти и что делать дальше.

Ответы [ 2 ]

3 голосов
/ 09 ноября 2011

В своем вопросе вы говорите:

Я могу принудительно скопировать отсутствующие сборки в Product.exe \ bin \ Debug, добавив ссылки на Общие сборки в проекте Product.exe, нопоскольку Product.exe явно не использует общие сборки, это больше похоже на клудж, чем на решение.

Не думаю, что я согласен.Это не идеально, но Visual Studio иногда требует этого даже внутри решения.Это зависит от того, как вы используете класс.

Хотя вы можете подумать, что это небольшой клудж, кажется, что ваши другие (смею сказать «клудгый») требования (один проект на решение) заставляют вещи казаться неуместными

2 голосов
/ 09 ноября 2011

Вы должны ссылаться только на голые сборки, когда они относительно стабильны и вне Решения.

Внутри вашего Решения ссылайтесь на них на вкладке Проекты.Это заставит VS настроить правильные зависимости и порядок сборки между проектами.

В текущей настройке проверьте зависимости Project (Solution | Properties).

...