Развертывание dll в GAC - PullRequest
3 голосов
/ 23 ноября 2011

У нас есть решение Sharepoint 2010, которое мы пытаемся развернуть в производственной среде.

Мы разработали это решение с использованием Visual Studio 2010 и создали несколько проектов, в результате которых появилось несколько DLL.

Мы получаем следующую ошибку при доступе к одной из веб-частей.

Произошла ошибка во время компиляции запрошенного файла или одной из его зависимостей.Тип 'xxxx' определен в сборке, на которую нет ссылок.Вы должны добавить ссылку на сборку 'xxx, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = xxxx'.

Для установки DLL - я перетащил их в GAC.Это хороший подход?Может ли это быть причиной проблемы?возможно, есть лучший способ установки в GAC?Или, может быть, они должны быть установлены в определенном порядке?Первый без зависимостей?

Это полная ошибка из файла журнала:

System.Web.HttpCompileException: c: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ Temporary ASP.NET Files \ root\ 6f2f2743 \ 7b5d4663 \ App_Web_rxpractioncommonwpusercontrol.ascx.12f7e65c.q7c1p6i0.0.cs (134): ошибка CS0012: тип 'xxxx' определен в сборке, на которую нет ссылок.Вы должны добавить ссылку на сборку 'xxxx, Версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = fe560f99f37381ef'.в System.Web.Compilation.AssemblyBuilder.Compile () в System.Web.Compilation.BuildProvidersCompiler.PerformBuild () в System.Web.Compilation.BuildManager.CompileWebFile (VirtualPath virtualPath) в System.Web.CompanagerPvirtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildI ... a47a805d-765d-429e-b080-fe031b3e4fac

Спасибо,

Джозеф

Ответы [ 3 ]

5 голосов
/ 23 ноября 2011

Вы должны создавать пакеты WSP с Visual Studio 2010 для ваших решений SharePoint 2010.Вы можете включить указанные сборки как часть вашего основного пакета.Для этого дважды щелкните «Пакет» в проекте SharePoint и перейдите на вкладку «Дополнительно».Отсюда вы сможете включать внешние сборки в ваш WSP или автоматически включать вывод из других проектов в ваше решение.

Если вы ссылаетесь на сборки, которые могут совместно использоваться несколькими решениями WSP, будьте осторожны с этимпредостережение: когда WSP отозван, все включенные сборки в WSP также отозваны, независимо от того, включает ли сборка и другой WSP.

Мой рекомендуемый лучший способ для общей сборки - создать автономное решение WSPкоторый содержит только сборки.Создайте новый пустой проект SharePoint.Нажмите на проект в обозревателе решений и просмотрите панель свойств, используя F4.Установите для параметра «Включить сборку в пакет» значение false, а для «Цель развертывания сборки» - значение GlobalAssemblyCache.Затем дважды щелкните пакет и перейдите на вкладку «Дополнительно», чтобы добавить ссылки на сборки.

У вас будет более одного WSP для развертывания вашего решения, но это поможет надежно справиться с зависимостями.

Никогда не следует использовать ручное добавление сборок в GAC в качестве метода развертывания на рабочем месте !!

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

Поскольку вы упоминаете, что вы уже пытались развернуть сборки из WSP, я подумал, что я бы перечислил другую возможность в качестве нового ответа.Вам нужно будет конкретно указать, какая сборка отсутствует в первую очередь, а затем проверить, присутствует ли эта сборка в GAC всех ваших внешних интерфейсов.Вы должны исключить любую возможность, что эталонная сборка фактически отсутствует.Используйте средство просмотра журнала Fusion, как было упомянуто в другом ответе.

Далее, как была разработана ваша веб-часть, и уверены ли вы, что веб-часть выдает эту ошибку?В частности, вы используете какую-либо разметку .ascx в своей веб-части для ссылки на элементы управления из этой «отсутствующей» сборки?Если это так, вам может потребоваться добавить директиву <%@ Assembly Name="" %> в вашу разметку, чтобы компилятор asp.net знал, что ссылаться на нее во время компиляции.Возможно, вам также может понадобиться добавить записи SafeControl.

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

Предпочтительный способ получения сборок в GAC будет с установщиком приложения :) Обратите внимание, что вам нужны повышенные привилегии для установки сборок в GAC. Вы также можете использовать gacutil.

Порядок сборки GAC не должен иметь значения.

В соответствии с ошибкой может отсутствовать необходимая сборка - используйте FusLogVw или инструмент, такой как Reflector, чтобы определить, какие зависимости не развертываются.

...