ฉันเพิ่งคัดลอกโครงการที่มีอยู่ไปยังเครื่องใหม่เอี่ยมเพื่อเริ่มพัฒนาและพบปัญหากับรุ่นหนึ่งของแอสเซมบลีที่อ้างอิงของฉัน (telerik DLL ตามที่เกิดขึ้น)
โครงการเดิมอ้างถึงแอสเซมบลีเวอร์ชันเก่ากว่า (ให้เรียกมันว่า v1.0.0.0) เครื่องใหม่ของฉันมีการติดตั้งแอสเซมบลีเวอร์ชันล่าสุดดังนั้นฉันคิดว่าฉันจะอัปเดต (ให้เรียก v2.0.0.0 เวอร์ชั่นใหม่)
ตอนนี้นี่คือปัญหา: ถ้าฉันคัดลอก v1.0.0.0 dll เก่าไปยังโฟลเดอร์โครงการและเพิ่มเป็นข้อมูลอ้างอิงเว็บไซต์เปิดตัวโดยไม่มีปัญหา ถ้าฉันลบการอ้างอิงนั้น (และลบ DLL เก่าออกจากระบบของฉัน) และเพิ่มเวอร์ชันใหม่ (v2.0.0.0) หน้าจะแสดงข้อยกเว้นดังต่อไปนี้:
ไม่สามารถโหลดไฟล์หรือแอสเซมบลี 'XXXXXX, เวอร์ชัน = 1.0.0.0, วัฒนธรรม = เป็นกลาง, PublicKeyToken = 121fae78165ba3d4' หรือการอ้างอิงอย่างใดอย่างหนึ่ง คำจำกัดความรายการของชุดประกอบที่อยู่ไม่ตรงกับการอ้างอิงชุดประกอบ (ข้อยกเว้นจาก HRESULT: 0x80131040)
เห็นได้ชัดว่ารหัสกำลังมองหารุ่นที่ล้าสมัยและไม่สามารถหาได้ แต่ทำไม
ฉัน greped โฟลเดอร์โซลูชันสำหรับหมายเลขเวอร์ชันนั้นและไม่พบการอ้างอิงเดียว ฉันตรวจสอบข้อความของไฟล์. csproj อีกครั้งและพบว่าเวอร์ชันแสดงเวอร์ชั่นล่าสุดอย่างถูกต้องและ HintPath แสดงพา ธ ไปยัง DLL ใหม่อย่างถูกต้อง นอกจากนี้เนื่องจากฉันไม่ได้ติดตั้ง DLL เก่าบนระบบจึงไม่ปรากฏใน GAC ของฉัน (แม้ว่า v2.0.0.0 จะเป็นไปตามที่คาดไว้)
จากนั้นฉันเปิดใช้งานตัวแสดงบันทึกการฟิวชั่นเพื่อพยายามหาสาเหตุว่าทำไมจึงมองหาเวอร์ชันเก่า แต่ไม่มีโชค:
Assembly Load Trace: The following information can be helpful to determine why the assembly 'XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4' could not be loaded.
=== Pre-bind state information ===
LOG: User = MyComp\me
LOG: DisplayName = XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
(Fully-specified)
LOG: Appbase = file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/
LOG: Initial PrivatePath = d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\bin
Calling assembly : WebApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\web.config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX.DLL.
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/90233b18/10d54998/XXXXXX/XXXXXX.DLL.
LOG: Attempting download of new URL file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/bin/XXXXXX.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
ทั้งหมดมันบอกว่ามันเริ่มต้นด้วยการมองหาชุดเก่าที่ ฉันได้พยายามหาวิธีแก้ปัญหาออนไลน์และเห็นคำถาม SO ที่คล้ายกันนี้แต่ดูเหมือนจะตรงข้ามกับปัญหาของฉัน โปรแกรมของผู้ถามนั้นกำลังค้นหา DLL ที่ผิดแทนที่จะเป็นที่อ้างอิง ในขณะที่ปัญหาของฉันคือโปรแกรมกำลังค้นหา DLL ที่ไม่ถูกต้องอย่างลึกลับและไม่สามารถค้นหาได้เมื่อสามารถหาที่ถูกต้องภายในโฟลเดอร์ bin และใน GAC
ทำไมฉันถึงมองหาเวอร์ชั่นเก่า? ฉันสามารถค้นหาการอ้างอิงที่ไม่ดีนี้ได้ที่ไหน