ข้อผิดพลาด CS1705: "ซึ่งมีเวอร์ชันที่สูงกว่าแอสเซมบลีที่อ้างอิง"


110

ฉันได้ตรวจสอบเรื่องนี้มานานแล้วและยังไม่ได้รับการแก้ไข ฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

Compiler Error Message: CS1705: Assembly 'My.Model, Version=1.1.4422.23773, Culture=neutral, 
PublicKeyToken=bfde95ba233094b2' uses 
'Common, Version=3.3.4273.24368, Culture=neutral, PublicKeyToken=bfde95ba233094b2' 
which has a higher version than referenced assembly
'Common, Version=3.3.4269.17112, Culture=neutral, PublicKeyToken=bfde95ba233094b2'

c:\WINDOWS\assembly\GAC_MSIL\Common\3.3.4269.17112__bfde95ba233094b2\Common.dll: 
(Location of symbol related to previous error)

เว็บเซิร์ฟเวอร์กำลังเรียกใช้ Server 2003 ฉันไปที่ c: \ windows \ assembly และสังเกตเห็นว่ามี Common.dll 3 เวอร์ชันอยู่ในรายการ เวอร์ชันสูงสุดที่แสดงคือ 3.3.4269.17112

ฉันคัดลอก dll พร้อมเวอร์ชัน: 3.3.4273.24368 ลงในไดเร็กทอรีแอสเซมบลี จากนั้นฉันก็รวบรวมและปรับใช้โค้ดของฉันใหม่ (อาจจะมากเกินไป แต่ก็โอเค) เมื่อฉันเปิดเบราว์เซอร์ในเซสชันใหม่และไปที่ URL ของไซต์อีกครั้งฉันก็ยังคงได้รับข้อความเดิม

ฉันสามารถใช้ windows explorer และตรวจสอบได้ว่า Common.dll เวอร์ชันสูงกว่าอยู่ในรายการแล้วเช่นกัน

ฉันจะตรวจสอบอะไรเพิ่มเติมเพื่อแก้ไขปัญหานี้ได้ ฉันไม่ต้องการเปลี่ยนการอ้างอิงในแอสเซมบลีของฉันให้ชี้ไปที่เวอร์ชันเก่ากว่า


2
*.*หมายเลขรุ่นบ้า สร้างทุกอย่างขึ้นใหม่วิธีเดียวที่จะมั่นใจได้
Hans Passant

คำตอบ:


39

3 ไอเดียให้คุณลอง:

  1. ตรวจสอบให้แน่ใจว่า dll ทั้งหมดของคุณถูกคอมไพล์เทียบกับ Common เวอร์ชันเดียวกัน
  2. ตรวจสอบว่าคุณมีการอ้างอิงโครงการในโซลูชันของคุณแทนการอ้างอิงไฟล์
  3. ใช้การเปลี่ยนเส้นทางการผูกใน web.config ของคุณ ( เวอร์ชันเดิมที่เชื่อมโยงกับเครื่องย้อนกลับ )

ยังมีจำหน่ายที่wayback machineและmicrosoft
nitzel

68

ฉันพบข้อผิดพลาดนี้เนื่องจาก "สร้างใหม่" ไม่ได้สร้างขึ้นใหม่จริงๆ

วิธีแก้ไข: ปิด Visual Studio ไปและลบโฟลเดอร์ bin จริงๆแล้วสร้างใหม่อาจทำงานได้ดีขึ้น

นอกจากนี้บางครั้ง Visual Studio ก็เกี่ยวข้องกับการอ้างอิงดังนั้นโปรดตรวจสอบไฟล์HintPathของคุณ.csproj


2
อันนี้ช่วยเบคอนของฉัน การทำงานในพื้นที่เป็นเรื่องปกติ แต่ฉันเผยแพร่การเปลี่ยนแปลงและสิ่งต่าง ๆ ก็แปลกประหลาด การลบเนื้อหาของโฟลเดอร์ bin ออนไลน์บังคับให้กลับมาซิงค์กัน ขอบคุณ!
pStan

41

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

คุ้มค่ากับการยิงเพราะทำได้ง่ายและรวดเร็ว


2
สิ่งนี้แก้ไขให้ฉันได้ขอบคุณ สถานการณ์ของฉันแตกต่างกันเล็กน้อย: มันไม่ได้อยู่ในรายการอัพเดทดังนั้นฉันต้องไปที่ติดตั้งและมีหน้าต่างที่แสดงเวอร์ชันแพ็คเกจต่อโครงการ ฉันกำลังอัพเกรดโมดูลเก่าเป็น cms เวอร์ชันใหม่ดังนั้นฉันจึงต้องไปที่แพ็คเกจปัญหาเลือกและคลิกติดตั้ง อาจเป็นเพราะซม. เพิ่งเปลี่ยนไปใช้ nuget แต่คุณช่วยฉันได้มากในcsprojการแก้ไขที่น่าเบื่อ!
rtpHarry

3
อย่าลืมอัปเดตแพ็คเกจ NuGet ที่ระดับโซลูชันแทนที่จะเป็นระดับโปรเจ็กต์
Jess

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

30

ปัญหาของฉันคือฉันมี 2 โครงการที่อ้างถึงสำเนา dll เดียวกัน 2 ชุดซึ่งมีเวอร์ชันที่แตกต่างกัน ฉันแก้ไขโดยการลบทั้งสองและตรวจสอบให้แน่ใจว่าพวกเขาอ้างอิงไฟล์ dll เดียวกัน


13

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

ในกรณีนี้ให้ใช้ยูทิลิตี้ gacutil.exe เพื่อถอนการติดตั้งแอสเซมบลีที่สองจาก GAC ตัวอย่างเช่นหากเป็นแอสเซมบลี 64 บิต:

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\gacutil.exe -u <assembly_name>

สองปีต่อมาและคำแนะนำของคุณได้ผลเหมือนมีเสน่ห์ การดูการอ้างอิงใน Object Browser จะเรียงลำดับ
ceebreenk

3

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


3

ทีมของฉันพบปัญหานี้ภายในสภาพแวดล้อมการสร้างของเรา ปัญหาเกิดจากความแตกต่างในองค์ประกอบ <HintPath> ของไฟล์. csproj

แอสเซมบลีทั่วไปของเรามีพา ธ สัมพัทธ์ที่ถูกต้องไปยังไดเร็กทอรีที่มีส่วนประกอบอ้างอิงของเรา แอสเซมบลีที่อ้างอิงมีเส้นทางจากโครงสร้างไดเร็กทอรีเดิม โซลูชันที่คอมไพล์บนเครื่อง dev สำเร็จเนื่องจาก GAC ได้แก้ไขการอ้างอิงถึงเวอร์ชันที่ถูกต้องที่ติดตั้งใน C: \ Program Files สภาพแวดล้อมการสร้างมีการติดตั้งแอสเซมบลีแบบดั้งเดิม (แม้ว่าจะไม่ควรมีเลยก็ตาม) ที่ถอยกลับไปและทำให้เกิดข้อผิดพลาด การอัปเดต <HintPath> ในโปรแกรมแก้ไขข้อความช่วยแก้ไขปัญหาได้


2

ปัญหาจะเกิดขึ้นหากแพ็กเกจนักเก็ตแตกต่างกันไปในหลายโครงการภายในโซลูชัน

คุณสามารถแก้ไขปัญหานี้ได้โดยอัปเดตแพ็คเกจ nuget เป็นเวอร์ชันทั่วไปพร้อมกับโครงการทั้งหมดใน SOLUTION


1

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


1

ฉันรู้ว่ามีการถามมานานแล้วหลังจากลองทำตามขั้นตอนข้างต้นแล้ว สิ่งที่ช่วยให้ผมได้ทำตามขั้นตอนต่อไปนี้และบทความนี้

ฉันพบข้อมูลอ้างอิงและเปลี่ยน PublicKeyToken จากที่อ้างถึงเป็นรุ่นเก่า

ฉันหวังว่านี่จะช่วยได้เช่นกัน


1

ฉันมีข้อผิดพลาดเดียวกัน ฉันแก้ไขข้อผิดพลาดหลังจากติดตั้งMicrosoft.AspNetCore.ALLในโครงการทดสอบแล้ว


0

โฟลเดอร์คอลเลกชัน dll แฮนด์เมดของ
ถ้าคุณแก้ปัญหามีโฟลเดอร์ขยะ dll ไฟล์จากห้องสมุดที่แตกต่างกัน
lib, source, libsฯลฯ
คุณจะได้รับปัญหานี้ถ้าคุณจะเปิดการแก้ไขปัญหาของคุณ (เป็นเวลาภาคเรียน) ใน Visual Studio และโฟลเดอร์รวบรวม dll ของคุณพลาดเพราะอย่างใดหรือพลาดไฟล์ dll ที่เป็นรูปธรรม

Visual Studio จะพยายามแทนที่การอ้างอิงของ dll อย่างเงียบ ๆ สำหรับบางสิ่งด้วยตัวมันเอง หาก VS สำเร็จการอ้างอิงใหม่จะยังคงอยู่สำหรับโซลูชันในพื้นที่ของคุณ ไม่ใช่สำหรับโคลน / เช็คเอาต์อื่น ๆ

เช่นของคุณ<HintPath>จะถูกละเว้นและไฟล์โปรเจ็กต์ของคุณ (.csproj) จะไม่ถูกเปลี่ยนแปลง
เป็นตัวอย่างของฉัน

<Reference Include="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\lib\DocumentFormat.OpenXml.dll</HintPath>
</Reference>

DocumentFormat.OpenXmlจะมีการอ้างอิงจากC:\Program Files (x86)\Open XML SDK\V2.5\libไม่ได้มาจากsolution\..\libโฟลเดอร์

วิธีแก้ปัญหาอย่างรวดเร็ว

  • ตรวจสอบและกู้คืนโฟลเดอร์รวบรวม dll ของคุณ
  • จาก Explorer โซลูชันทำยกเลิกโครงการแล้วโครงการโหลด

วิธีแก้ปัญหาที่ถูกต้องคือการย้ายไปยังโปรแกรมจัดการแพ็คเกจ NuGet


0

สำหรับ SharePoint ตรวจสอบให้แน่ใจว่าภายใต้โฟลเดอร์รากของคุณคุณไม่มีโฟลเดอร์ "bin" ที่มี DLL ของคุณถ้าเป็นเช่นนั้นให้ลบทิ้ง (และเปลี่ยน "Copy Local" เป็น false ใน VS)


0

การอ้างอิงในโครงการเว็บไซต์จะถูกเก็บไว้ในไฟล์ web.config อัปเดตข้อมูลอ้างอิงที่นั่นเพื่อแก้ไขข้อผิดพลาด

ฉันใช้เวลาดูข้อมูลอ้างอิงทั้งหมดในโซลูชันของฉันก่อนที่จะตระหนักว่าฉันลืมเกี่ยวกับการอ้างอิงในไฟล์ web.config


0

ฉันมีปัญหาเดียวกันกับ UnitTestingProject โดยที่ใน MainProject ฉันใช้ "System.Web.Mvc เวอร์ชัน = 3.0.0.0" และใน UnitTestingProject ฉันใช้ "System.Web.Mvc เวอร์ชัน = 3.0.0.1"

เปลี่ยนสิ่งต่อไปนี้ในไฟล์ <Reference Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.AspNet.Mvc.3.0.50813.1\lib\net40\System.Web.Mvc.dll</HintPath> </Reference>


0

ฉันได้รับสิ่งนี้หลังจากเพิ่ม Episerver Find ลงในไซต์ของเราและติดตั้งแพ็คเกจ NuGet ที่เกี่ยวข้องสำหรับ Episerver Find

การแก้ไขเป็นเรื่องง่าย: อัปเดตโปรแกรมเสริมที่เกี่ยวข้องกับ Episerver ทั้งหมดด้วย (แม้ว่าจะดูเหมือนไม่เกี่ยวข้อง: CMS, CMS.TinyMCE, CMS.UI ฯลฯ )

หลังจากอัปเดตโปรแกรมเสริม Episerver ที่เป็นไปได้ทั้งหมดและการคอมไพล์ใหม่ข้อผิดพลาดก็หายไป


0

ในสถานการณ์ของฉันฉันแก้ไขไฟล์. csproj สำหรับแอป dotnetCore ของฉัน ผมสังเกตเห็นว่าtargetFrameworkแท็กมีค่าของnetcoreapp2.1และRuntimeFrameworkVersionแท็กค่าของ2.0.0 ดังนั้นฉันจึงเปลี่ยนRuntimeFrameworkVersionเป็น2.1.0บันทึกรีสตาร์ท VS และสร้างใหม่จากนั้นแก้ไขข้อผิดพลาด

หวังว่านี่จะช่วยคุณได้ ...

โชคดี,

Sugeshan


-1

ในโครงการของคุณค้นหาการอ้างอิงSystem.Web.Mvcตรวจสอบเวอร์ชัน

หลังจากนั้นคลิกขวาอ้างอิง -> การประกอบและ system.web.mvc และค้นหาการตั้งค่ามัน

ปัญหานี้ทำให้แอสเซมบลีเหล่านี้เป็นเวอร์ชันต่างๆ

แก้ไข: กว่าเลือกจัดการแพ็คเกจ NuGet และติดตั้งโปรแกรมปรับปรุง (หากคุณมีหลายโครงการให้ติดตั้งการอัปเดตไปด้วย)

การอัปเดตที่สำคัญคือMicrosoft.AspNet.Mvc และMicrosoft.Net.Compilersอย่าลืม!


-1

ในทีมของเราเราทำงานกับคอมพิวเตอร์เครื่องอื่นด้วยคอมไพล์ มีคนอัปเดตdllและฉันไม่มี ฉันเพิ่งอัปเดตการอ้างอิงการอ้างอิงและปัญหาได้รับการแก้ไขแล้ว


-3

ฉันมีปัญหาที่คล้ายกันฉันได้สร้าง DLL คือ A.dll ซึ่งอ้างถึง DLL อื่นเช่น B.dll

ฉันสร้างแอปพลิเคชั่น C.exe และอ้างอิง DLLs A.dll และ B.dll

วิธีแก้ไข - ในการลบการอ้างอิงของ B.dll จาก c.exe ฉันสามารถแก้ไขปัญหาได้

หวังว่านี่จะช่วยได้

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