Не удалось загрузить файл или сборку '' или одну из ее зависимостей

Любая помощь, пожалуйста?

У меня только одна библиотека, и это сводит меня с ума. это ошибка, которую я получаю. Никаких других зависимостей я не использую.

Could not load file or assembly 'FOD.Intranet.Lib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=039c1f3a4c719e82' or one of its dependencies. The system cannot find the file specified. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.IO.FileNotFoundException: Could not load file or assembly 'FOD.Intranet.Lib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=039c1f3a4c719e82' or one of its dependencies. The system cannot find the file specified.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  

Stack Trace: 


[FileNotFoundException: Could not load file or assembly 'FOD.Intranet.Lib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=039c1f3a4c719e82' or one of its dependencies. The system cannot find the file specified.]
   NewCollection.VisualWebPart1.VisualWebPart1UserControl.TodaysNews() +0
   NewCollection.VisualWebPart1.VisualWebPart1UserControl.Page_Load(Object sender, EventArgs e) +52
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +42
   System.Web.UI.Control.OnLoad(EventArgs e) +132
   System.Web.UI.Control.LoadRecursive() +66
   System.Web.UI.Control.AddedControl(Control control, Int32 index) +350
   NewCollection.VisualWebPart1.VisualWebPart1.CreateChildControls() +155
   System.Web.UI.Control.EnsureChildControls() +146
   System.Web.UI.Control.PreRenderRecursiveInternal() +61
   System.Web.UI.Control.PreRenderRecursiveInternal() +224
   System.Web.UI.Control.PreRenderRecursiveInternal() +224
   System.Web.UI.Control.PreRenderRecursiveInternal() +224
   System.Web.UI.Control.PreRenderRecursiveInternal() +224
   System.Web.UI.Control.PreRenderRecursiveInternal() +224
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3394

person Imir Hoxha    schedule 06.12.2011    source источник


Ответы (8)


Чтобы Visual Studio добавляла стороннюю сборку или даже вашу собственную сборку из другого проекта в решение в GAC, выполните следующие действия:

  1. Откройте Package.package из папки Package в проекте SharePoint.

  2. Нажмите «Дополнительно» в нижней части.

  3. Нажмите «Добавить» и выберите, какой тип сборки вы хотите добавить.

  4. В диалоговом окне выберите файл DLL, проверьте GAC или BIN, добавьте безопасные элементы управления и записи ресурсов класса, если необходимо. Щелкните ОК.

Ваша сборка будет упакована в WSP, определена в манифесте и развернута каждый раз.

person Oleg Savelyev    schedule 08.12.2011

Проблема решена!

Я думал, что Visual Studio копирует DLL в GAC, но, видимо, нет. Я скопировал его туда вручную, и он работает.

Однако возникает вопрос: нормально ли, что Visual Studio не копирует его в GAC, когда я развертываю приложение sharepoint?

Для тех, кто хотел бы знать, как скопировать dll в GAC

есть два способа скопировать dll в GAC:

  1. скопируйте dll вручную

    1. Open c:\windows\assembly directory in windows explorer
    2. Откройте другой экземпляр проводника Windows и перейдите в то место, где находится ваша dll, обычно в папке bin. (так что теперь у вас будет два открытых окна)
    3. выберите dll, которую вы хотите скопировать в gac, и перетащите ее в каталог сборки, c: \ windows \ assembly
  2. используйте VS, чтобы развернуть его для вас в GAC.

    1. in your sharepoint project double click on "Package".
    2. Package.Package откроется. Посмотрите в левый нижний угол экрана и нажмите «Дополнительно»,
    3. затем нажмите «Добавить», затем выберите «Добавить сборку из выходных данных проекта ...».
    4. В раскрывающемся списке «Исходный проект» выберите проект и нажмите «ОК».
    5. наконец, разверните решение, и dll будет в GAC.

Спасибо за Вашу поддержку.

person Imir Hoxha    schedule 07.12.2011
comment
если вы хотите, чтобы визуальная студия сделала это, убедитесь, что вы установили для свойства copy local ссылки значение true. - person Daniël Tulp; 22.05.2014
comment
Примечание: никогда не трогайте папку Windows \ Assembly, копирование вручную - ОЧЕНЬ ПЛОХАЯ ИДЕЯ. Используйте gacutil / i для установки библиотеки DLL и gacutil / u для ее удаления. / i принимает полный путь, в то время как / u берет имя dll без расширения. - person David; 10.07.2014

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

введите описание изображения здесь

person Giri    schedule 21.04.2016

Пожалуйста, попробуйте отменить ссылку на DLL, затем повторно сослаться на нее и перестроить свой проект. Также убедитесь, что версия соответствует версии, указанной в веб-конфигурации проекта.

person Community    schedule 06.12.2011
comment
Привет, Лафама, спасибо за ответ. Я разыменовываю его и снова ссылаюсь на него, но это не работает. В webconfig я должен видеть dll библиотеки классов или проект, который использует dll? Я не нашел никаких ссылок на это пространство имен FOD.Intranet.Lib в webconfig. - person Imir Hoxha; 07.12.2011

  • Номер версии совпадает?
  • Странно видеть, что вы пытаетесь загрузить файл .lib вместо dll. Возможно, вы хотели вместо этого загрузить dll?
  • Для отладки такого рода проблем попробуйте Fusion Logging
  • Вы говорите, что используете только одну библиотеку, но у этой библиотеки могут быть некоторые зависимости, о которых вы не знаете. Этот вопрос SO касается перечисления зависимостей управляемой сборки .NET.
person dario_ramos    schedule 06.12.2011
comment
Привет, Dario_ramos, я загружаю dll, но имя сборки - FOD.Intranet.Lib.dll - person Imir Hoxha; 07.12.2011
comment
Значит, проблема не в этом. Я бы попробовал вести журнал слияния - person dario_ramos; 07.12.2011
comment
Я создал демонстрационную библиотеку, в которой есть единственный метод, складывающий два числа, и я ссылаюсь на него из проекта sharepoint. У меня та же ошибка, что и выше. Теперь, когда я использовал проект asp.net, он отлично работает. на dll не жалуется. - person Imir Hoxha; 07.12.2011
comment
Что-то не так с конфигурацией вашего проекта Sharepoint. Не очень много знаю о Sharepoint, но вы можете узнать, как работает поиск dll в Sharepoint. - person dario_ramos; 07.12.2011
comment
Спасибо Дарио за помощь. Я разберусь в этом подробнее, но это сводит меня с ума. - person Imir Hoxha; 07.12.2011
comment
Вы пробовали вести журнал слияния? Поскольку он регистрирует все попытки загрузки сборки .NET, он сообщит вам все места, где Sharepoint пытается найти dll, и, если это связано с зависимостью, он сообщит, чего не хватает. Строгая проверка имени, если вы ее используете, тоже может вызвать проблемы с загрузкой. - person dario_ramos; 07.12.2011

Предполагая, что у вас есть доступ к серверу SharePoint, попробуйте следующее. Какие-то случайные мысли и без определенного порядка.

  • Разверните сборку в GAC или скопируйте dll в папку bin вашего веб-приложения.
  • Добавьте информацию о сборке в раздел сборок web.config и в раздел безопасных элементов управления.
  • Если вы разрабатываете веб-часть, обязательно добавьте ссылку на нее в раздел безопасных элементов управления веб-частей (хотя я не думаю, что это ваша проблема)
  • В некоторых случаях может помочь подпись сборки строгим именем.
  • Если у вас есть настраиваемые зависимости, вам необходимо выполнить те же действия для всех зависимостей (кроме .net framework и связанных с SharePoint).

Вы разрабатываете свой проект SharePoint (вы имеете в виду веб-часть?) С помощью Visual Studio? Вы ссылаетесь на него в своем проекте SharePoint? Вам необходимо предоставить нам более подробную информацию о вашей среде разработки, чтобы мы могли точно определить проблему.

person Ken    schedule 06.12.2011

Если вы используете код Page.Load ("control_path ..."). убедитесь, что в фактическом загружаемом файле ascx нет директив, включающих сборку из вашего сообщения об исключении.

<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
person Maks Matsveyeu    schedule 07.12.2011
comment
Привет, Макс, я использую оператор Import в пользовательском элементе управления. Мне нужно получить доступ к библиотеке в файле .ascx. - person Imir Hoxha; 07.12.2011
comment
Так что это на самом деле зависимость. Вы должны поместить эту библиотеку (FOD.Intranet.Lib) в решение. Пожалуйста, дайте мне знать, если вам понадобится помощь с добавлением пользовательской сборки в wsp. - person Maks Matsveyeu; 07.12.2011
comment
Когда я добавляю ссылку на сборку, я вижу, что Visual Studio копирует ее в папку Bin, и я вижу ее в папке ссылок в Visual Studio. Что я делаю неправильно? - person Imir Hoxha; 07.12.2011
comment
Пожалуйста, прочтите эту статью. blog.mastykarz.nl/ в нем есть пошаговое руководство по добавлению сборки в пакет. твой случай более простой. вы должны добавить СУЩЕСТВУЮЩУЮ СБОРКУ вместо ВЫПУСКА ПРОЕКТА. и проверьте ЦЕЛЬ РАЗВЕРТЫВАНИЯ в GAC. И вам не нужно добавлять SafeControls. - person Maks Matsveyeu; 08.12.2011

для парней, все еще изучающих эту проблему, вам нужно знать одну вещь: существуют разные GACutils, поэтому вам нужно убедиться, что вы используете правильный GACUTIL для развертывания DLL для исправления GAC

например: если моя dll соответствовала структуре 3.5 .net, а моя версия ОС была 64-битными окнами, она была бы в расположении ниже

C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v7.0A \ Bin \ x64

Боролся 4 глупых дня, чтобы понять это

person mps    schedule 18.09.2015