ไม่สามารถโหลดไฟล์หรือแอสเซมบลี '' หรือการอ้างอิงอย่างใดอย่างหนึ่ง

ความช่วยเหลือใด ๆ โปรด?

ฉันมีห้องสมุดเพียงแห่งเดียวและมันทำให้ฉันแทบคลั่ง นี่เป็นข้อผิดพลาดที่ฉันได้รับ ฉันไม่ได้ใช้การพึ่งพาอื่นใด

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 explorer และไปที่ตำแหน่งที่ dll ของคุณอยู่ ซึ่งโดยปกติจะอยู่ในโฟลเดอร์ bin (ตอนนี้คุณจะมีสองหน้าต่างเปิดอยู่)
    3. เลือก dll ที่คุณต้องการคัดลอกไปยัง gac แล้วลากไปไว้ในไดเร็กทอรีแอสเซมบลี c:\windows\assembly
  2. ใช้ VS เพื่อปรับใช้ให้คุณกับ GAC

    1. in your sharepoint project double click on "Package".
    2. Package แพ็คเกจจะเปิดขึ้น มองซ้ายล่างของหน้าจอแล้วคลิก "ขั้นสูง"
    3. จากนั้นคลิกที่ "Add" จากนั้นเลือก "Add Assembly from project output..."
    4. ในรายการดรอปดาวน์โปรเจ็กต์แหล่งที่มา ให้เลือกโปรเจ็กต์ จากนั้นคลิกตกลง
    5. ในที่สุดก็ปรับใช้โซลูชันและ dll จะอยู่ใน GAC

ขอบคุณสำหรับการสนับสนุนของคุณ.

person Imir Hoxha    schedule 07.12.2011
comment
หากคุณต้องการให้ Visual Studio ทำเช่นนี้ ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าคุณสมบัติ 'copy local' ของการอ้างอิงเป็นจริง - 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 ฉันต้องดู class Library 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 ของคุณและในส่วนการควบคุมที่ปลอดภัย
  • หากคุณกำลังพัฒนา web part ตรวจสอบให้แน่ใจว่าได้เพิ่มการอ้างอิงในส่วนการควบคุมความปลอดภัยของ web part (แม้ว่าฉันไม่คิดว่านี่คือปัญหาของคุณ)
  • การลงนามในที่ประชุมด้วยชื่อที่เข้มแข็งอาจช่วยได้ในบางกรณี
  • หากคุณมีการขึ้นต่อกันแบบกำหนดเอง คุณจะต้องทำตามขั้นตอนเดียวกันสำหรับการขึ้นต่อกันทั้งหมด (นอกเหนือจาก .net framework และ SharePoint ที่เกี่ยวข้อง)

คุณกำลังพัฒนาโครงการ SharePoint ของคุณ (คุณหมายถึง web part ใช่หรือไม่) โดยใช้ 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
สวัสดี Maks ฉันใช้คำสั่งนำเข้าในการควบคุมผู้ใช้ ฉันต้องเข้าถึงไลบรารีในรูปแบบไฟล์ .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/ มีคำแนะนำทีละขั้นตอนเกี่ยวกับวิธีเพิ่มชุดประกอบลงในแพ็คเกจ กรณีของคุณง่ายกว่า คุณต้องเพิ่ม AN EXISTING ASSEMBLY แทน PROJECT OUTPUT และตรวจสอบเป้าหมายการปรับใช้กับ GAC และคุณไม่จำเป็นต้องเพิ่ม SafeControls - person Maks Matsveyeu; 08.12.2011

สำหรับผู้ชายที่ยังคงมองหาปัญหานี้อยู่ สิ่งหนึ่งที่คุณต้องรู้คือมี GACutils ที่แตกต่างกันออกไป ดังนั้นคุณต้องแน่ใจว่าคุณใช้ GACUTIL ที่ถูกต้องเพื่อปรับใช้ DLL เพื่อแก้ไข GAC

เช่น: หาก dll ของฉันสอดคล้องกับเฟรมเวิร์ก 3.5 .net และระบบปฏิบัติการเวอร์ชันของฉันคือ windows 64 บิต มันจะอยู่ในตำแหน่งด้านล่าง

C:\Program ไฟล์ (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64

พยายามดิ้นรนเป็นเวลา 4 วันเพื่อที่จะเข้าใจสิ่งนี้

person mps    schedule 18.09.2015