2013-10-09 3 views
8

У меня возникла странная проблема с развертыванием справочной библиотеки (ServiceStack.OrmLite) во время публикации веб-проектов. Он работал нормально до прошлой недели или около того, и теперь внезапно некоторые библиотеки ServiceStack не копируются при публикации проекта в локальную файловую систему, FTP или Web Deploy из Visual Studio или msbuild.Ссылающиеся сборки (DLL) неожиданно не копируются при публикации

Ссылка на ormLite добавлена ​​в проект класса lib через nuget. Ссылка на проект класса lib добавляется в основной проект веб-приложения. Когда я публикую проект Web App, он компилирует и копирует все файлы, за исключением трех из пяти библиотек ServiceStack.OrmLite (а именно ServiceStack.Common, ServiceStack.Interfaces и ServiceStack.Text не копируются). Я проверил (и даже сбросил) свойство «Копировать локальное» на «true» для всех ссылок на DLL, но проблема сохраняется. Я также проверил, что OrmLite не зарегистрирован в GAC.

Любые советы или предложения приветствуются.

Update 1:

я наткнулся на кучу постов, связанных с той же проблемой (но не с ServiceStack, в частности). Похоже, Visual Studio и msbuild [по праву] игнорируют любые косвенные ссылки в проекте во время публикации.

Вот некоторые решения я натолкнулась:

  1. Эталонные сборки в главном проекте, а также.

  2. Используйте сценарий сборки, чтобы скопировать библиотеки DLL в качестве события после сборки.

  3. Добавьте метод класса (макет) в класс lib и создайте экземпляр любого класса из сборки или пространства имен, которое не копируется во время публикации. Я выбрал этот вариант и частично решил проблему. Теперь ServiceStack.Common и ServiceStack.Text копируются, но ServiceStack.Interfaces по-прежнему не копируется, хотя я создал макетный экземпляр «ServiceStack.Logging.LogManager», который является частью ServiceStack.Interfaces. Итак, в основном я все еще застрял.

+0

Вы уверены, что узлы не в какой-либо из GACs? http://stackoverflow.com/questions/2660355/net-4-0-has-a-new-gac-why –

+0

Выучите какое-либо новое решение этой проблемы? Моя проблема заключается в том, чтобы идентифицировать недостающие библиотеки DLL, так как все работает нормально на локальной машине, но не работает на сервере интеграции ... Даже если нам нужно вручную добавить ссылку, как мы можем узнать, какую DLL добавить? –

ответ

1

Это по дизайну. Вам необходимо вручную добавить вторичные ссылочные сборки к вашему проекту с выводом на «Копировать всегда», как показано в этой статье. http://msdn.microsoft.com/en-us/library/vstudio/cc837214%28v=vs.100%29.aspx

+3

Связанная с вами статья очень специфична для проектов взаимодействия с Office. Это не по дизайну, а косвенные ссылки обычно обнаруживаются просто отлично. Поскольку ОП полагался первоначально. Пожалуйста, поддержите свое требование, предоставив доказательства того, что оно действительно по дизайну. –

0

Вы можете попробовать this answer.

В основном, добавьте соответствующий <dependentAssembly> в ваш {web|app}.config:

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
      <assemblyIdentity name="ServiceStack.Common" culture="neutral" /> 
      <bindingRedirect oldVersion="0.0.0.0-3.9.70.0" newVersion="3.9.70.0" /> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 
Смежные вопросы