ข้อความแสดงข้อผิดพลาด 'ไม่สามารถโหลดประเภทที่ขอหนึ่งประเภทขึ้นไป รับคุณสมบัติ LoaderExceptions สำหรับข้อมูลเพิ่มเติม '


347

ฉันได้พัฒนาแอพพลิเคชั่นโดยใช้Entity Framework , SQL Server 2000, Visual Studio 2008 และ Enterprise Library

มันทำงานได้ดีในพื้นที่ แต่เมื่อฉันปรับใช้โครงการกับสภาพแวดล้อมการทดสอบของเราฉันได้รับข้อผิดพลาดต่อไปนี้:

ไม่สามารถโหลดประเภทที่ขอหนึ่งประเภทขึ้นไป ดึงข้อมูลคุณสมบัติ LoaderExceptions สำหรับข้อมูลเพิ่มเติม

การติดตามสแต็ก: ที่ System.Reflection.Module._GetTypesInternal (StackCrawlMark & ​​stackMark)

ที่ System.Reflection.Assembly.GetTypes ()

ที่ System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.LoadTypesFromAssembly (บริบทการโหลดบริบท)

ที่ System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.InternalLoadAssemblyFromCache (บริบทการโหลดบริบท)

ที่ System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.LoadAssemblyFromCache (ชุดประกอบ, บูลีน loadReferencedAssemblies, พจนานุกรม2 knownAssemblies, Dictionary2 & typesInLoading, List`1 & ข้อผิดพลาด)

ที่ System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyFromCache (ObjectItemCollection objectItemCollection objectItemCollection แอสเซมบลีบูลีน loadReferencedAssemblies)

ที่ System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyForType (ชนิดชนิด)

ที่ System.Data.Metadata.Edm.MetadataWorkspace.LoadAssemblyForType (ชนิดชนิด Assembly callAssembly)

ที่ System.Data.Objects.ObjectContext.CreateQuery [T] (สตริงการสืบค้น String, ObjectParameter [] พารามิเตอร์)

ดูเหมือนว่า Entity Framework มีปัญหาเบาะแสใด ๆ ที่จะแก้ไขได้อย่างไร


ไม่มี bullet เวทมนตร์เพื่อแก้ปัญหานี้ แต่คำตอบนี้จะช่วยให้คุณทราบเหตุผลที่แน่นอนมากstackoverflow.com/a/8824250/185022
AZ_

คำตอบ:


105

ฉันแก้ไขปัญหานี้ได้โดยการตั้งค่าคุณลักษณะคัดลอกภายในเครื่องของการอ้างอิงโครงการของฉันเป็นจริง


33
เมื่อเราเจาะลึกลงไปในข้อยกเว้นภายในจนกว่าเราจะเห็นข้อยกเว้นของประเภท ReflectionTypeLoadException และมันมีคุณสมบัติ "LoaderExceptions" ซึ่งให้ข้อมูลเกี่ยวกับข้อมูล DLL ที่หายไปหรือไม่ตรงกัน จากนั้นเราสามารถดูแลการกระทำที่เหมาะสมจากที่นั่น
Sai

19
ก็ไม่เป็นไรเมื่อคุณทำการดีบั๊กจาก Visual Studio แต่ถ้าคุณเป็นเว็บแอปพลิเคชันจะโยนข้อผิดพลาดนี้ไปยังเซิร์ฟเวอร์ที่ใช้งานจริงเท่านั้น แม้หลังจากที่คุณตั้งค่าคุณลักษณะการคัดลอกภายในเครื่องเป็นจริง
Yousi

2
นี่เป็นวิธีแก้ปัญหาสำหรับเซิร์ฟเวอร์ที่ใช้งานจริงไม่ใช่ใน Visual Studio ภายใน คัดลอกโลคัลคัดลอก DLL ที่อ้างอิงในเวลาบิลด์และ DLL จะถูกค้นหาครั้งแรกในโฟลเดอร์เดียวกันกับแอปพลิเคชันที่ทำงานอยู่ ปัญหาอาจยังคงอยู่หากคุณไม่ได้คัดลอก DLL ที่ได้รับการคัดลอกในเวลาบิลด์ไปยังโฟลเดอร์ที่ถูกต้องบนเซิร์ฟเวอร์ที่ใช้งานจริง
Mentoliptus

ในกรณีของฉันฉันต้องเพิ่มการอ้างอิง nuget ไปยัง Microsoft.AspNetCore.Mvc.ViewFeatures
MFedatto

530

ข้อผิดพลาดนี้ไม่มีคำตอบสัญลักษณ์แสดงหัวข้อย่อยมายากลที่แท้จริง กุญแจสำคัญคือการมีข้อมูลทั้งหมดเพื่อทำความเข้าใจกับปัญหา เป็นไปได้มากว่าแอสเซมบลีที่โหลดแบบไดนามิกหายไปจากแอสเซมบลีที่อ้างอิง แอสเซมบลีนั้นต้องอยู่ในไดเรกทอรีช่องเก็บของแอปพลิเคชันของคุณ

ใช้รหัสนี้เพื่อตรวจสอบสิ่งที่ขาดหายไป

using System.IO;
using System.Reflection;
using System.Text;

try
{
    //The code that causes the error goes here.
}
catch (ReflectionTypeLoadException ex)
{
    StringBuilder sb = new StringBuilder();
    foreach (Exception exSub in ex.LoaderExceptions)
    {
        sb.AppendLine(exSub.Message);
        FileNotFoundException exFileNotFound = exSub as FileNotFoundException;
        if (exFileNotFound != null)
        {                
            if(!string.IsNullOrEmpty(exFileNotFound.FusionLog))
            {
                sb.AppendLine("Fusion Log:");
                sb.AppendLine(exFileNotFound.FusionLog);
            }
        }
        sb.AppendLine();
    }
    string errorMessage = sb.ToString();
    //Display or log the error based on your application.
}

4
ขอบคุณ! นี่ควรเป็นส่วนหนึ่งของการตั้งค่าการบันทึกในระบบที่ใช้ MEF
Bogi lenvig

4
ถ้าฉันสามารถ upvote ทุกครั้งที่ผมกลับไปที่คำตอบนี้มามันจะมีประมาณ 5 upvotes เพิ่มเติม ... และนับ
sǝɯɐs

2
คุณช่วยชีวิตฉัน. ขอบคุณมาก. ฉันไม่เคยพบปัญหา มันเป็น dll เก่า ๆ ที่ฉันไม่ได้ใช้อีกแล้วซุ่มซ่อนอยู่ในโครงสร้างโครงการของฉันและทำให้เกิดปัญหานี้
richard

4
เพียงแค่ค้นหาสิ่งที่ขาดหายไปใช้throw new Exception(errorMessage);ไปหวังว่าจะช่วยใครซักคน
shaijut

2
หากไม่มีรหัสพิเศษใด ๆ ใน Visual Studio ให้ไปที่การตั้งค่าข้อยกเว้นและวางในช่องค้นหา TypeLoadException จากนั้นเปิดใช้งานช่องทำเครื่องหมายคู่ที่ได้รับความนิยม นอกจากนี้คุณอาจต้องปิดการใช้งานในตัวเลือกภายใต้หัวข้อการแก้ปัญหา "รหัสของฉัน" เพื่อให้คุณสามารถตรวจจับข้อยกเว้นเมื่อเกิดขึ้นในการพึ่งพาที่คุณไม่ได้เขียน
David Burg

56

ทางออกหนึ่งที่เหมาะกับฉันคือการลบ bin / และ obj / โฟลเดอร์และสร้างโซลูชันใหม่


ฉันต้องสร้างโครงการทดสอบอีกครั้งเองไม่แน่ใจว่าคุณกำลังอ้างถึงโครงการทดสอบที่นี่หรือโครงการที่คุณกำลังทดสอบ
Jason Axelson

4
การแสดงความคิดเห็นอื่น: คลิกขวาที่โหนดโซลูชันใน "โซลูชัน Explorer" และคลิก "ล้างโซลูชัน" จากนั้นคลิก "สร้างโซลูชันใหม่" (หากมีการเพิ่มใหม่ในโครงการแหล่งที่มาของคุณ - โครงการอื่น ๆ ในการแก้ปัญหาของคุณ - ส่วนหนึ่งทำให้การเปลี่ยนแปลงจะสะท้อนโฟลเดอร์ dll โครงการของคุณและแก้ไขปัญหานี้)
Emre Guldogan

ฉันมีปัญหานี้ ตามที่แนะนำฉันปิด Visual Studio, โฟลเดอร์ bin ที่ถูกลบเปิดโครงการและสร้างใหม่และประสบความสำเร็จ
Sagar S.

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

33

สองวิธีที่เป็นไปได้:

  1. คุณกำลังรวบรวมในโหมด Release แต่การปรับใช้รุ่นคอมไพล์ที่เก่ากว่าจากไดเรกทอรี Debug ของคุณ (หรือในทางกลับกัน)
  2. คุณไม่มี. NET Framework รุ่นที่ถูกต้องติดตั้งในสภาพแวดล้อมการทดสอบของคุณ

ฉันมีปัญหาเดียวกันประเด็นที่ 1 นั้นแม่นยำสำหรับฉัน ขอบคุณวิลเลียม
Matthew

ฉันมีปัญหาเดียวกันนี้ ... ฉันได้ผ่านทั้งสองของทั้งสองข้อเสนอแนะและยังคงได้รับข้อผิดพลาดเดียวกัน :(
เดวิด Kiff

นอกจากนี้ยังสามารถเกิดขึ้นได้หาก DLL ที่อ้างอิงของคุณเป็น "ถูกบล็อก" คลิกขวาที่มันและเลือก "ปลดบล็อค"
Ben

3
นอกจากนี้ยังพบว่าสิ่งนี้จะเกิดขึ้นหากหนึ่งในโครงการ DLL ถูกตั้งค่าให้สร้าง "x64" แทน "Any CPU"
DCastenholz

# 1 สามารถเกิดขึ้นได้หากการกำหนดค่าโซลูชันไม่ถูกต้อง - ไม่ได้เลือกโครงการสำหรับการสร้างตัวอย่างเช่นหลังจากลบและเพิ่มโครงการอีกครั้งเพื่อแก้ไข
ดู

13

ตามที่ได้รับการกล่าวก่อนหน้านี้มักจะเป็นกรณีของการชุมนุมไม่ได้อยู่ที่นั่น

หากต้องการทราบว่าชุดประกอบที่คุณขาดหายไปให้แนบดีบักเกอร์ของคุณตั้งค่าเบรกพอยต์และเมื่อคุณเห็นวัตถุข้อยกเว้นเจาะลึกลงไปที่คุณสมบัติ 'LoaderExceptions' ชุดประกอบที่หายไปควรอยู่ที่นั่น

หวังว่ามันจะช่วย!


1
นอกจากนี้เรายังสามารถเจาะลึกข้อยกเว้นภายในได้จนกว่าเราจะเห็นข้อยกเว้นของประเภท ReflectionTypeLoadException และมีคุณสมบัติ "LoaderExceptions" ซึ่งให้ข้อมูลเกี่ยวกับข้อมูล DLL ที่หายไปหรือไม่ตรงกัน
Sai

2
ในโซลูชันที่มีหลายโครงการเราจะดูว่าโครงการใดเป็นสาเหตุของปัญหาใน LoaderExceptions ฉันเห็นว่าไม่พบ System.Web.Mvc แต่ฉันไม่ทราบว่าโครงการใด 20 โครงการในโซลูชันนี้อาจมีปัญหา
mrcoulson

9

วิธีแก้ไขคือตรวจสอบ LoaderException: ในกรณีของฉันไฟล์ DLL บางไฟล์หายไป

ป้อนคำอธิบายภาพที่นี่


6

ตรวจสอบให้แน่ใจว่าคุณอนุญาตแอปพลิเคชัน 32 บิตบนIISหากคุณปรับใช้กับ IIS คุณสามารถกำหนดสิ่งนี้ได้ในการตั้งค่าของ Application Pool ปัจจุบันของคุณ


6

ฉันพบข้อผิดพลาดนี้ด้วยแอปพลิเคชันASP.NET 4 + SQL Server 2008 R2 + Entity Framework 4

มันจะทำงานได้ดีบนเครื่องพัฒนาของฉัน (Windows Vista 64-bit) จากนั้นเมื่อปรับใช้กับเซิร์ฟเวอร์ ( Windows Server 2008 R2 SP1) จะทำงานจนกว่าเซสชันหมดเวลา ดังนั้นเราจึงปรับใช้แอปพลิเคชันและทุกอย่างดูดีจากนั้นทิ้งไว้นานกว่า 20 นาทีหมดเวลาเซสชันแล้วข้อผิดพลาดนี้จะถูกโยนทิ้ง

เพื่อแก้ปัญหานี้ฉันใช้รหัสนี้ในบล็อกของ Ken Coxเพื่อดึงคุณสมบัติ LoaderExceptions

สำหรับสถานการณ์ของฉัน DLL ที่หายไปคือMicrosoft.ReportViewer.ProcessingObjectModel(รุ่น 10) DLL นี้ต้องติดตั้งในGACของเครื่องที่แอปพลิเคชันทำงาน คุณสามารถค้นหาได้ใน Microsoft Report Viewer 2010 Redistributable Package ที่มีอยู่ในเว็บไซต์ดาวน์โหลดของ Microsoft


5

ตอนแรกฉันลองใช้ตัวบันทึกฟิวชั่น แต่ก็ไม่ได้ช่วยฉันเลยลงเอยด้วยการใช้ WinDbg ด้วยส่วนขยาย SOS

! dumpheap -stat -type Exception / D

จากนั้นฉันตรวจสอบ FileNotFoundExceptions ข้อความในข้อยกเว้นมีชื่อของ DLL ที่ไม่ได้โหลด

หมายเหตุ, / D จะให้ผลลัพธ์การเชื่อมโยงหลายมิติแก่คุณดังนั้นคลิกที่ลิงก์ในข้อมูลสรุปสำหรับ FileNotFoundException ที่จะแสดงรายการข้อยกเว้น จากนั้นคลิกที่ลิงก์เพื่อดูข้อยกเว้นข้อใดข้อหนึ่ง นั่นจะ! dumpobject ข้อยกเว้นนั้น จากนั้นคุณควรจะสามารถคลิกที่ลิงค์สำหรับข้อความในวัตถุข้อยกเว้นและคุณจะเห็นข้อความ


5

หากคุณกำลังใช้ EntityDataSource ในโครงการของคุณ, การแก้ปัญหาที่อยู่ในการแก้ไข: 'ไม่สามารถโหลดหนึ่งหรือมากกว่าหนึ่งในประเภทที่ขอ' ข้อผิดพลาด คุณควรตั้ง ContextTypeName = "ProjectNameNameSpace.EntityContainerName" '

สิ่งนี้แก้ปัญหาของฉัน ...


4

อินสแตนซ์ของปัญหานี้สิ้นสุดลงเป็นข้อมูลอ้างอิงที่ขาดหายไป แอสเซมบลีถูกอ้างถึงใน app.config แต่ไม่มีการอ้างอิงในโครงการ


3

หากคุณใช้Entity Frameworkลองคัดลอกการอ้างอิงต่อไปนี้ในเครื่อง

  • System.Data.Entity
  • System.Web.Entity

เปลี่ยนคุณสมบัติ "Copy Local" เป็น "True" สำหรับการอ้างอิงและเผยแพร่เหล่านี้


3

โซลูชันอื่นที่ควรทราบว่าเหตุใดจึงไม่ทำงาน (จากการเชื่อมต่อของ Microsoft):

  1. เพิ่มรหัสนี้ในโครงการ:

    foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
    {
        asm.GetTypes();
    }
  2. ปิดการประกอบการทำให้เป็นอันดับรุ่น

  3. สร้างและดำเนินการ

2

ฉันมี. NET 4.0, ASP.NET MVC 2.0, เว็บแอพพลิเคชั่นEntity Framework 4.0 ที่พัฒนาใน Visual Studio 2010 ฉันมีปัญหาเดียวกันกับที่ทำงานบนเซิร์ฟเวอร์ Windows Server 2008 R2 หนึ่งเซิร์ฟเวอร์ แต่ไม่ได้อยู่ในเซิร์ฟเวอร์ Windows Server 2008 R2 อื่น ถึงแม้ว่ารุ่นของ. NET และ ASP.NET MVC จะเหมือนกัน แต่ก็มีข้อผิดพลาดนี้เหมือนกันกับคุณ

ฉันไปตามคำแนะนำของ miko ดังนั้นฉันจึงติดตั้งWindows SDK v7.1 (x64) บนเซิร์ฟเวอร์ที่ล้มเหลวดังนั้นฉันจึงสามารถเรียกใช้!

ปรากฏว่าการติดตั้ง Windows SDK v7.1 (x64) สามารถแก้ไขปัญหาได้ สิ่งที่หายไปจะต้องรวมอยู่ใน SDK ก็สามารถดาวน์โหลดได้จากMicrosoft Windows SDK สำหรับ Windows 7 และ .NET Framework 4


2

การเพิ่มปัญหา / แนวทางแก้ไขเฉพาะของฉันลงในนี้เนื่องจากนี่เป็นผลลัพธ์แรกสำหรับข้อความแสดงข้อผิดพลาดนี้ ในกรณีของข้อผิดพลาดที่ได้รับเมื่อฉันใช้งานแอพลิเคชันที่สองที่อยู่ในโฟลเดอร์ของโปรแกรมแรกของฉันในIIS ทั้งสองได้กำหนดสตริงการเชื่อมต่อด้วยชื่อเดียวกันส่งผลให้แอปพลิเคชันลูกมีข้อขัดแย้งและทำให้เกิดข้อความแสดงข้อผิดพลาดที่ไม่ชัดเจน (กับฉัน) นี้ มันแก้ไขได้โดยการเพิ่ม:

<clear/>

ในบล็อกสตริงการเชื่อมต่อของเว็บแอปพลิเคชันลูกซึ่งป้องกันไม่ให้สืบทอดสตริงการเชื่อมต่อของไฟล์ web.config ที่สูงกว่าในลำดับชั้นดังนั้นจึงมีลักษณะดังนี้:

<connectionStrings>
  <clear/>
  <add name="DbContext" connectionString="MySERVER" providerName="System.Data.SqlClient" />
</connectionStrings>

การอ้างอิงคำถาม Stack Overflow ซึ่งช่วยได้เมื่อฉันพิจารณาว่าเกิดอะไรขึ้นแอปพลิเคชันสำหรับเด็กจะได้รับมรดกจาก web.config ของผู้ปกครองหรือไม่ .


2

สิ่งนี้ใช้ได้สำหรับฉัน เพิ่มใน web.config ของคุณ

<system.web>
  <trust level="Full" />

ฉันได้รับข้อผิดพลาดนี้:It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.

2

ปัญหาของฉันได้รับการแก้ไขหลังจากที่ฉันลบไฟล์ชุดประกอบที่ซ้ำซ้อนออกจากbinโฟลเดอร์


2

ในกรณีที่ไม่มีคำตอบอื่นใดช่วยคุณ:

เมื่อฉันมีปัญหานี้มันกลับกลายเป็นว่าบริการ Windows ของฉันถูกสร้างขึ้นสำหรับแพลตฟอร์ม x64 และฉันก็ติดตั้ง InstallUtil.exe รุ่น 32 บิตโดยไม่ได้ตั้งใจ ดังนั้นตรวจสอบให้แน่ใจว่าคุณใช้ InstallUtil เวอร์ชันที่ถูกต้องสำหรับแพลตฟอร์มที่คุณสร้าง


ฉันมีปัญหาที่คล้ายกัน DLLs ที่ฉันใช้อยู่นั้นถูกรวบรวมสำหรับตัวประมวลผล 32 บิตเปลี่ยนเป็นตัวประมวลผลใด ๆ และใช้งานได้ในขณะนี้
Blake Thingstad

1

ข้อเสนอแนะอื่น ๆ เป็นสิ่งที่ดี ในกรณีของปัญหาคือการที่พัฒนากล่องเป็นเครื่อง 64 บิตโดยใช้สถานที่ตั้ง x86 ของ API ต่าง ๆ รวมทั้งSilverlight

ด้วยการเปลี่ยนแพลตฟอร์มเป้าหมายเพื่อให้ตรงกับเซิร์ฟเวอร์ 32 บิตที่มีการปรับใช้เว็บแอปพลิเคชันลบข้อผิดพลาดส่วนใหญ่ที่เกี่ยวข้องกับการไม่สามารถโหลดประเภทที่ร้องขอหนึ่งประเภทขึ้นไป


1

ฉันเปลี่ยนคุณสมบัติรุ่นเฉพาะของการอ้างอิงเป็นเท็จและช่วยได้


1

ฉันพบข้อความแสดงข้อผิดพลาดเดียวกันเมื่อรวบรวมแพ็คเกจ Visual Studio (VSPackage) คอมไพล์โซลูชันทั้งหมดและข้อผิดพลาดถูกส่งออกมาเมื่อสร้างแพ็คเกจโดย CreatePkgDef ต้องบอกว่าเป็นที่ชัดเจนว่าฉันไม่สามารถจับ LoaderExceptions ได้เนื่องจากไม่ใช่แอปพลิเคชันของฉันที่พ่น แต่เครื่องมือของ Microsoft เอง (แม้ว่าฉันจะรับผิดชอบต่อความสับสนของ CreatePkgDef)

ในกรณีของฉันสาเหตุที่แท้จริงคือโซลูชันของฉันสร้าง MyDll.dll ที่ได้ลงทะเบียนกับGAC แล้ว (และพวกเขาแตกต่างกัน) ดังนั้น CreatePgkDef จึงสับสนว่าต้องใช้อันไหนและตัดสินใจที่จะทิ้งข้อผิดพลาดซึ่งไม่ใช่ ' ไม่มีประโยชน์จริงๆ MyDll.dll ใน GAC ได้รับการลงทะเบียนโดยโปรแกรมติดตั้งของผลิตภัณฑ์เดียวกัน

วิธีแก้ไข

  1. วิธีที่ต้องการ: ตรวจสอบให้แน่ใจว่าคุณใช้ MyDll.dll รุ่นที่ถูกต้อง
    1. เมื่อรวบรวมโครงการของคุณตรวจสอบให้แน่ใจว่าคุณใช้หมายเลขเวอร์ชันที่แตกต่างจากที่คุณใช้ในเวอร์ชันก่อนหน้าซึ่งอยู่ใน GAC ตรวจสอบให้แน่ใจว่าคุณลักษณะต่อไปนี้ถูกต้อง:
      • [ชุดประกอบ: AssemblyVersion ("1.0.0.1")] // สมมติว่าไฟล์ DLL เก่าเป็นรุ่น 1.0.0.0
      • [ชุดประกอบ: AssemblyFileVersion ("1.0.0.1")] // สมมติว่าไฟล์ DLL เก่าเป็นรุ่น 1.0.0.0
    2. หากจำเป็นให้ระบุชื่อชุดประกอบแบบเต็ม (ตัวอย่างเช่น "MyDll.dll, รุ่น = 1.0.0.1, วัฒนธรรม = เป็นกลาง, PublicKeyToken = 1234567890abcdef") เมื่อคุณอ้างอิงในโครงการอื่นของคุณ
  2. หากล้มเหลว: คุณสามารถถอนการติดตั้ง MyDll.dll เก่าจาก GAC
    1. วิธีถอนการติดตั้งชุดประกอบจาก GAC
    2. ถอนการติดตั้งแอปพลิเคชันที่มี MyDll.dll

การเปลี่ยน AssemblyVersion นั้นดีพอสำหรับฉัน :)

ฉันหวังว่านี่จะเป็นประโยชน์


1

ฉันมีปัญหาเดียวกัน (แต่ในพื้นที่ของฉัน) เมื่อฉันพยายามเพิ่มการโยกย้าย Entity Framework ด้วย Package Manager Console

วิธีที่ฉันแก้ไขมันคือการสร้างแอปพลิเคชันคอนโซลที่ Main () มีรหัสต่อไปนี้:

 var dbConfig = new Configuration();
 var dbMigrator = new DbMigrator(dbConfig);
 dbMigrator.Update();

ตรวจสอบให้แน่ใจว่าคลาส Configuration คือการโอนย้าย Configuration ของโปรเจ็กต์ที่ล้มเหลวของคุณ คุณจะต้องใช้ System.Data.Entity.Migrations เพื่อใช้ DbMigrator

ตั้งค่าเบรกพอยต์ในแอปพลิเคชันของคุณและเรียกใช้ ข้อยกเว้นควรถูกจับได้โดย Visual Studio (ยกเว้นว่าคุณมีประเภทข้อยกเว้นที่ตั้งค่าไม่ให้หยุดเซสชันการดีบัก) และคุณควรจะสามารถค้นหาข้อมูลที่คุณกำลังมองหาได้

การอ้างอิงที่ขาดหายไปในกรณีของฉันคือ EFProviderWrapperToolkit


1

ฉันพบปัญหานี้เมื่อฉันติดตั้งแพคเกจNuGetในหนึ่งในโครงการและลืมอัปเดตโครงการอื่น

ฉันแก้ไขมันโดยเพียงแค่ทำให้ทั้งสองโครงการมีแอสเซมบลีอ้างอิงเดียวกัน


ขอบคุณสำหรับลิงค์! ฉันไม่รู้ว่า NuGet คืออะไร
jebar8

1

มันเกิดขึ้นกับฉันด้วย ฉันแก้ไขปัญหาดังต่อไปนี้: คลิกขวาโซลูชันจัดการแพคเกจ NuGet สำหรับโซลูชัน ... รวมแพ็คเกจและอัปเกรดแพ็คเกจเป็นเวอร์ชันเดียวกัน


0

ตั้งค่าโหมด IIS แบบ 32 บิตเป็นจริงโหมดดีบักเป็นจริงในไฟล์การกำหนดค่าการลบtempไดเรกทอรีและการตั้งค่า IIS ช่วยแก้ไขปัญหาชั่วคราวและจะกลับมาอีกครั้งในภายหลัง


0

ตรวจสอบว่าแต่ละโครงการของคุณมีการติดตั้งอย่างถูกต้องในเครื่องมือจัดการการกำหนดค่าจัดการการกำหนดค่า

คล้ายกับของWilliam Edmondsonเหตุผลสำหรับปัญหานี้ฉันเปลี่ยนการตั้งค่าเครื่องมือจัดการการกำหนดค่าจาก "Debug" "CPU ใด ๆ " เป็น "Debug" ".NET" ปัญหาคือว่ารุ่น ". NET" ไม่ได้รับการกำหนดค่าให้สร้างโครงการทั้งหมดดังนั้น DLLs ของฉันบางรายการจึงล้าสมัย (ในขณะที่บางรุ่นเป็นปัจจุบัน) ทำให้เกิดปัญหามากมายในการเริ่มต้นแอปพลิเคชัน

การแก้ไขชั่วคราวคือทำตามคำแนะนำของ Kenny Eliassonเพื่อล้างไดเรกทอรี \ bin และ \ obj อย่างไรก็ตามทันทีที่ฉันทำการเปลี่ยนแปลงเพิ่มเติมในโครงการที่ไม่ได้คอมไพล์ทุกอย่างจะล้มเหลวอีกครั้ง


0

ฉันยังได้รับปัญหานี้เมื่อสร้าง Add-in Microsoft Word ใหม่ด้วย Visual Studio 2015 ปัญหาเกี่ยวกับฉันมี MS Office 2 เวอร์ชัน 2013 และ 2016 ฉันถอนการติดตั้ง MS Office 2013 แล้วทำงานได้


0

ฉันสร้างโครงการไม่กี่แห่งสำหรับ SharePoint และแน่นอนปรับใช้พวกเขา ครั้งหนึ่งมันเกิดขึ้น

ฉันพบชุดประกอบเก่าใน C: \ Windows \ assembly \ temp \ xxx (พร้อม FarManager) ลบออกหลังจากรีบูตและสร้างโครงการทั้งหมด

ฉันมีคำถามสำหรับ MSBuild เพราะในโครงการประกอบเชื่อมโยงเหมือนโครงการและทุกการชุมนุมมีการทำเครื่องหมาย "คัดลอกท้องถิ่น" แต่ไม่ได้มาจาก GAC


0

ฉันสามารถแก้ไขปัญหานี้ได้โดยทำเครื่องหมาย "Copy Local = True" ในไฟล์ DLL ที่อ้างอิงทั้งหมดในโครงการสร้างใหม่และปรับใช้บนเซิร์ฟเวอร์ทดสอบ


0

ฉันมีปัญหากับ automap ในbinโฟลเดอร์ไฟล์ automap.4net.dll อยู่ที่นั่น แต่ด้วยเหตุผลบางอย่าง automap.xml และ automap.dll ไม่ได้ คัดลอกไปยังbinไดเรกทอรีแก้ปัญหา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.