Я работал на функцию на прошлой неделе, что бы добавить некоторые приемники событий в определенный экземпляр списка. (Я blogged немного об этом списка приемник здесь).
Использование командной строки, Я мог бы установить функцию с без ошибок (Но смотрите ниже скрытые ошибки). Когда я попытался развернуть функцию на сайте, Мосс жаловался на "FileNotFoundException" Ошибка. Эта запись в блоге описывает, как я решил ее.
Это ошибка, которая Мосс показал мне в веб-браузере:
Функция ' b2cb42e3-4f0a-4380-aaba-1ef9cd526f20’ не может быть установлен, так как загрузка событий приемника Ассамблеи "xyzzyFeatureReceiver_0" не удалось: System.IO.FileNotFoundException: Не удалось загрузить файл или сборку ' xyzzyFeatureReceiver_0’ или один из его зависимостей. Система не может найти указанный файл.
Имя файла: ' xyzzyFeatureReceiver_0’
в System.Reflection.Assembly.nLoad(AssemblyName имя файла, Строки кода, Свидетельства assemblySecurity, LocationHint Ассамблея, StackCrawlMark& stackMark, Логическое throwOnFileNotFound, Логическое forIntrospection)
в System.Reflection.Assembly.InternalLoad(AssemblyName параметр assemblyRef, Свидетельства assemblySecurity, StackCrawlMark& stackMark, Логическое forIntrospection)
в System.Reflection.Assembly.InternalLoad(Строки параметр assemblyString, Свидетельства assemblySecurity, StackCrawlMark& stackMark, Логическое forIntrospection)
в System.Reflection.Assembly.Load(Строки параметр assemblyString)
в Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
ПРЕДУПРЕЖДЕНИЕ: Включено ведение журнала привязки Ассамблея OFF.
Для включения журнала отказа Ассамблеи bind, Установите значение реестра [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) Кому 1.
Примечание: Есть некоторые производительности, связанные с регистрацией отказа Ассамблеи bind.
Чтобы отключить эту функцию, Удалите значение реестра [HKLMSoftwareMicrosoftFusion!EnableLog].
Я знаю, как намеренно вызвать эту ошибку: не устанавливать сборку в глобальный кэш сборок. Но, Он был в GAC. Я обычно установить сборки в GAC, перетащив их в c:\windowsassembly папку с помощью проводника windows. Я никогда не чувствовал 100% комфортабельный делать, потому что я всегда думал что gacutil существовала по причине … так что я попытался что. Он сделал никакой разницы.
Я искал Интернет и нашел этот пост: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1
Плакат случилось с использовать же корня кусок кода (из WSS внутри книги из этого списка) так что было обнадеживающим. Однако, предложение украшения с Ассамблее [Ассамблея: ] Директива не имеет смысла для меня. Я попробовал его в любом случае, и я был прав. Он сделал никакой разницы.
Затем я заметил, что моя определение класса не было общественного. Я сделал это общественность, и что сделал никакой разницы.
Следующая, Я пошел на проблемы предоставления журнал неудачи bind Ассамблея"" (После полезной и точной инструкции) и это то, где вещи начали получать интересные. Журнал показывает мне, что среда выполнения ищет повсюду на этом сервере для моей сборки. Кажется, даже искать его в моей аптечке. Но … Он не будет его поиск в глобальном кэше сборок.
Я положил на моем Зимняя куртка и идти поиск Internets снова и найти, что кто-то имел эту проблему слишком. Продолжительные дискуссии в этой публикации Питерс покинуть в ничто, и я не могу найти решение.
Я перехожу мою сборку в одно из мест, где журнал утверждает, это поиск и немного больше прогресса. Я я вознаграждены с новой ошибки в браузере, когда я пытаюсь активировать функцию:
Не удается создать объект функция приемника от Ассамблеи «xyzzyFeatureReceiver_0», Тип "Conchango.xyzzyFeatureReceiver" для функции b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: System.ArgumentNullException: Значение не может быть пустым.
Имя параметра: Тип
в System.Activator.CreateInstance(Тип type, Логический параметр nonPublic)
в System.Activator.CreateInstance(Тип type)
в Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
Время одной последней поездки в Интернет!
На этот раз я узнать, достаточно предсказуемо, этой ошибки Мосс потому, что данная сборка не находится в глобальном кэше сборок.
Я хочу получить что-то положительное из этого и пытаются чувствовать себя немного горд, что я создал Беглец сборок MSIL, но он не работает. Я просто раздражает. Я считаю себя бормотание "курица или яйцо" под мое дыхание.
Я, наконец, решили Пунт. Я создать совершенно новый проект и копировать/вставить код из incredible-cloaked-from-the-GAC-assembly проекта не работающие над этот новый проект. (Я смотрю на сборки флага, под названием что-то вроде "скрыть от Ассамблеи, в том случае, если установлена в глобальный кэш сборок" но не могу найти один).
Я установить и активировать ее и … Он работает! Таким образом, После всего этого, Мне пришлось в основном ' перезагрузки’ Мой проект. Это еще одна причина, почему я ненавижу компьютеров.
Я узнал что-то полезное из этого. Я была установка компонентов с использованием командной строки stsadm весь день и были с использованием "-сила" вариант по привычке. По некоторым причинам, Я не использовать параметр - force когда я установил новый проект. На этот раз, Я сделал на самом деле, действительно, забудьте скопировать этот новый проект сборки в GAC. В результате, Я получил "FielNotFoundException" Ошибка. На этот раз, Я получил его от stsadm, не тогда, когда я пытался активировать функцию через веб-браузер. Таким образом, -сила на самом деле играет две роли. Это позволяет повторно установить существующий компонент. Она также позволяет установить функцию багги, которая не может работать во время выполнения путем подавления ошибки. Он, вероятно, говорит столько в помощь где-то, но я не заметил.
</конец>
Также, Я имел мой 2 часов истеричного nintendoSIXTYFOURRRR в плохой способ моментов, когда я переименовал имен на приемник компонента, чтобы помочь отследить где ваш или чужой начал.
Корень проблемы лежит на развернутых wsp в базы данных sharepoint. Я прочитал ваш пост и хотя он действительно решить проблему у нас есть огромный решения с несколькими проектами и десятки файлов, так что двигаться все не вариант.
Независимо от того, сколько вы обновите свой GAC или сборку, что дает вам беда Ассамблеей в текущей WSP, установленных на sharepoint.
Вы можете легко заметил, что, пытаясь только отозвать решение (который является, где происходит ошибка). Все, что происходит на «время втягивания" следует рассматривать «развертывания wsp»-не только сам проект.
Мой обходной:
– Центральный администратора: Отменить решение
– Stsadm: deletesolution
– Visual Studio => Проект => Пакет
– Stsadm: addsolution-файла ProjectbinDebugProject.wsp
– Stsadm: deploysolution-имя project.wsp-немедленно - allowgacdeployment-сила
– Visual Studio => Развертывание
Я также удалены папки bin и отладка из проекта перед повторным запуском развертывания, может не иметь никакого эффекта, но стоит комментируя.
Это работает для обоих
«Функция … не может быть установлена, потому что загрузка сборки приемника событий"
и
«Удалось создать объект функции приемника из сборки"
Спасибо!
Франциско
Только что провел несколько часов, пытаясь исправить этот же вопрос и найти лучшее решение, чем просто воссоздать проекта.
Оказалось, что по некоторым причинам, которые Visual Studio поставил цель build x 86 вместо x 64 или MSIL – сборка была в GAC, не просто же GAC, 64 бит SharePoint искал в.