Помогите, пожалуйста, вырвать мои волосы над этим:
У меня есть решение Visual Studio ASP.NET MVC, в котором проект ссылается на стороннюю DLL, в данном случае log4net
. Мое дерево решений выглядит следующим образом:
- GenericLibrary
- MyApp.NHibernate
- MyApp.Library
- MyApp.WebUI
MyApp.WebUI является основным начальным веб-проектом MVC и содержит ссылки на GenericLibrary , MyApp.NHibernate и MyApp.Library . MyApp.NHibernate содержит ссылки на все биты NHibernate, включая log4net.
Теперь проблема в том, что когда я компилирую свое решение, кажется, что dll log4net появляются и исчезают из каталога / bin проекта MyApp.WebUI, поэтому NHibernate генерирует ошибки по понятным причинам. У меня на втором мониторе было окно проводника Windows, которое просматривало папку / bin веб-проекта, и я вижу, что dll log4net появляются, а затем исчезают после каждой компиляции, кажется, что это происходит последовательно (появляются, исчезают, повторно появляются, исчезают и т. д.), а не случайно.
MyApp.NHibernate - единственный проект, который ссылается на dll log4net, но GenericLibrary имеет ссылку на NHibernate, но НЕ log4net. MyApp.NHibernate ссылается на GenericLibrary, MyApp.Library также ссылается на GenericLibrary, но GenericLibrary стоит отдельно.
Единственное решение, которое я могу придумать, - это добавить ссылки в основной проект MyApp.WebUI для каждой внешней библиотеки / библиотеки DLL, используемой в моем решении (Nhibernate, log4net, Castle Windsor и т. Д.), Чтобы исправить проблему log4net и избежать этого. происходит в будущем. Но это не очень аккуратное решение для меня.
Обновление: Чтобы ответить на вопрос Кекекелы, для параметра «Локальная копия» задано значение true как для ссылки log4net, так и для самой ссылки на проект MyApp.NHibernate, см. Снимок экрана ниже:
альтернативный текст http://www.dominicpettifer.co.uk/Temp/DLL-Hell-1.png
Обновление 2: Bizzarely эта проблема, кажется, только влияет на log4net dll. Я попытался добавить другую стороннюю dll в проект MyApp.NHibernate, dll NLog, кажется, что он остается на месте, тогда как log4net продолжает исчезать и снова появляться.