Почему некоторые ссылки пропускаются при запуске моего приложения? - PullRequest
3 голосов
/ 27 июля 2010

У меня есть следующая структура проекта, использующая модель домена, StructureMap и Fluent NHibernate:

Project Structure

Проблема, с которой я сталкиваюсь, заключается в том, что для Fluent NHibernate требуется все следующеебыть каталогом bin сайта для работы во время выполнения:

  • Antlr3.Runtime.dll *
  • Castle.Core.dll
  • Castle.DynamicProxy2.dll
  • FluentNHibernate.dll *
  • Iesi.Collections.dll *
  • log4net.dll *
  • NHibernate.ByteCode.Castle.dll
  • NHibernate.dll *

Проблема в том, что не всеэти сборки выводятся в каталог bin моего сайта.В настоящее время только элементы с * выводятся правильно.Элементы в полужирном отсутствуют в каталоге bin.

Теперь я предположил бы, что причина этого в том, что я не добавил их в качестве ссылок на мой Fluent NHibernate проект.В настоящее время у меня есть только ссылки на NHibernate.dll и FluentNHibernate.dll .Одних этих двух ссылок достаточно для того, чтобы пронести предметы, отмеченные *, но они не проникают через пропущенные предметы.

Итак, я подумал, что, чтобы заставить их всех пройти, я быпросто добавьте их как ссылки на проект Fluent NHibernate.К сожалению, это не имеет значения;те же элементы все еще отсутствовали в каталоге bin.

Я никогда не понимал, как Visual Studio решает, какие сборки копировать.Я всегда предполагал, что это была любая сборка, помеченная как Copy Local = true , но в этом сценарии это не так.

Конечно, я мог бы просто добавить все ссылки на сборкив Website, но тогда это закончилось, победив точку слабой связи проектов через StructureMap.

Кто-нибудь знает, почему отсутствуют сборки и как я могу заставить их правильно копировать

1 Ответ

4 голосов
/ 27 июля 2010

Вы можете добавить ссылки на проект, который требует, чтобы эти файлы присутствовали в выходном каталоге (веб-сайт в вашем случае), или вы можете добавить шаг пост-сборки в свой скрипт сборки, чтобы скопировать их.

Это тот случай, когда VS и компилятор «умны» в отношении того, нужны ли ссылки на самом деле или нет.Компилятор C # оптимизирует те ссылки, которые на самом деле не требуются.Добавление ссылки на необязательную сборку в VS обеспечит ее отображение в выходном каталоге этого проекта.Однако зависимые проекты получат ту же сборку, только если она фактически используется проектом, ссылающимся на нее.То есть, если компилятор C # не оптимизировал свою ссылку.Вот почему вам нужно добавить ссылку на проект сайта, если вы идете по этому пути.

Лично я сделал именно это.Я не думаю, что это тесная связь, так как NH по-прежнему динамически разрешает сборки во время выполнения.И это не значит, что я не могу просто заменить другие сборки байт-кода вручную и перезапустить мое приложение.Но это также не так, как если бы я сделал бы это без адекватного тестирования, поэтому в некотором смысле я считаю себя связанным с Каслом на основе этого.И поэтому меня не раздражают ссылки.

...