Файл ключа, GAC, DLL ... Не удалось установить компонент, поскольку загрузка сборки получателя событий не удалась - PullRequest
0 голосов
/ 03 марта 2010

Я делаю свою первую DLL, простую функцию HelloWorld SharePoint. Функция имеет обработчик событий, поэтому код находится рядом с файлом feature.xml и elements.xml. Я могу построить решение отлично, и у меня есть скрипт пост-сборки, который вызывает gacutil.exe. Затем я добавил ключевой файл, выбрал случайное имя и добавил решение. В файле feature.xml у меня есть:

ReceiverAssembly="HelloWorld, Version 1.0.0.0, Culture=neutral, PublicKeyToken=b59ad8f489c4a334"
ReceiverClass="HelloWorld.FeatureReceiver"

Я составил значение в PublicKeyToken.

Функция не будет установлена, я получаю:

Не удалось установить функцию 'b2cb42e2-4f0a-4380-aaba-1ef9cd526f20', поскольку не удалось загрузить сборку приемника событий "HelloWorld, версия 1.0.0.0, Culture = нейтральный, PublicKeyToken = b59ad8f489c4a334": System.IO.FileLoadException: Не удалось загрузить файл или сборку "HelloWorld \, версия 1.0.0.0 \, Culture \ = нейтральный \, PublicKeyToken \ = b59ad8f489c4a334" или одну из ее зависимостей. Указанное имя сборки или кодовая база недопустимы. (Исключение из HRESULT: 0x80131047) Имя файла: 'HelloWorld \, Версия 1.0.0.0 \, Культура \ = нейтральный \, PublicKeyToken \ = b59ad8f489c4a334' в System.Reflection.AssemblyName.nInit (Сборка и сборка, логическое значение для интроспекции, логическое повышение значенияResolveEvent) в System.Reflection.Assembly.InternalLoad (строка String AssemblyString, Свидетельство AssemblySecurity, StackCrawlMark & ​​stackMark, логическое значение для интроспекции) в System.Reflection.Assembly.Load (String assemblyString) в Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject ()

Поскольку я понятия не имею, что происходит с файлом ключа / подписью, я думаю, что я делаю что-то не так, например, должна ли быть какая-то связь между именем файла ключа и информацией в функции. XML-файл?

Ответы [ 2 ]

4 голосов
/ 03 марта 2010

"Я составил значение в PublicKeyToken."

Вы не можете придумать это. На самом деле это функция ключа, который вы используете, чтобы дать вашей сборке строгое имя. Вы можете использовать sn.exe -T для определения фактического токена открытого ключа вашей сборки (если он есть). Вы можете использовать sn.exe -v, чтобы убедиться, что сборка подписана правильно. Если он еще не подписан, следуйте инструкциям Стива и используйте sn.exe -T или аналогичный (он также будет отображаться как столбец в c: \ windows \ assembly после его установки), чтобы получить настоящий PublicKeyToken и убедиться, что вы используете что в feature.xml

0 голосов
/ 03 марта 2010

Все выглядит хорошо из того, что вы показали. Убедитесь, что:

  • Сборка действительно находится в GAC с версией и publickeytoken, который вы указываете при установке функции (я полагаю, с помощью STSADM.exe)
  • Если сборка НЕ ​​находится в GAC, вы либо неправильно указали ее с помощью своего ключевого файла, либо GACUTIL по какой-то причине просто отказывает в сборке.
  • Убедитесь, что сборка действительно называется просто "HelloWorld" в GAC.

Перейдите в свойства проекта, перейдите на вкладку «Подписывание» и убедитесь, что флажок «Подписать сборку» установлен и указывает на ваш ключевой файл. Вы можете вручную установить dll в GAC, перетащив файл из каталога bin в C:\windows\assembly.

Надеюсь, это проливает немного света на то, как получить вашу dll в GAC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...