Я использую 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
Что делает порядок сборки примерно таким:
- Common.DAL
- Common.BLL
- Product.DAL
- Product.BLL
- 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 похожие проблемы, но не нашел ничего полезного.
Я не знаю, куда идти и что делать дальше.