ไม่สามารถโหลดไฟล์หรือชุดประกอบ 'Newtonsoft.Json, รุ่น = 4.5.0.0, วัฒนธรรม = เป็นกลาง, PublicKeyToken = 30ad4fe6b2a6aeed'


233

ฉันได้รับข้อผิดพลาด

System.IO.FileLoadException: ไม่สามารถโหลดไฟล์หรือชุดประกอบ 'Newtonsoft.Json, รุ่น = 4.5.0.0, วัฒนธรรม = เป็นกลาง, PublicKeyToken = 30ad4fe6b2a6aeed' หรือการอ้างอิงอย่างใดอย่างหนึ่ง คำจำกัดความรายการของชุดประกอบที่อยู่ไม่ตรงกับการอ้างอิงชุดประกอบ (ข้อยกเว้นจาก HRESULT: 0x80131040)

สำหรับการสร้าง CI ของฉัน

วิธีแก้ปัญหาที่ฉันลอง

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
        culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

มันยังไม่ทำงาน


ข้อผิดพลาดหมายถึง. NET ไม่พบไลบรารีJson.NET คุณติดตั้งมันหรือไม่?
TypeIA

22
ปัญหาเดียวกันที่แน่นอน - ฉันขับรถถั่ว แจ้งให้เราทราบหากคุณพบทางออก
Dean Chalk

ที่จริงแล้วสำหรับฉันเพิ่มสิ่งที่คุณพยายามแก้ไขปัญหา
h.alex

ใช้ตัวเลือกรวมในตัวจัดการแพ็คเกจของ NuGet เพื่อให้แน่ใจว่าเวอร์ชั่นต่างๆจะไม่แยกออกจากกัน
niico

นี่เป็นสิ่งเดียวที่ทำงานให้ฉัน: github.com/Redth/PushSharp/issues/361#issuecomment-181387928
RichC

คำตอบ:


237

ในคอนโซลตัวจัดการแพคเกจดำเนินการ: Update-Package –reinstall Newtonsoft.Json.

UPDATE

ฉันโพสต์สิ่งนี้เป็นความคิดเห็น แต่เป็น @OwenBlacker ที่แนะนำฉันจะใส่ไว้ที่นี่:

หากคุณยังคงได้รับข้อผิดพลาดหลังจากทำสิ่งนี้สิ่งที่ได้ผลสำหรับฉันในที่สุดคือฉันลบ<dependentAssembly>ส่วนของ Json.Net จาก.configไฟล์ของฉัน การติดตั้งใหม่จะนำกลับมาใหม่หากไม่ได้อยู่ที่นั่นและคุณต้องลบทิ้ง จนกว่าจะมีวิธีการแก้ปัญหาปกติในแพคเกจตัวเองฉันกลัวว่าขั้นตอนด้วยตนเองนี้เป็นสิ่งที่ต้องทำ

หมายเหตุ: โปรดอ่านความคิดเห็นด้านล่างก่อนที่จะทำเช่นนี้

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


7
เพื่อทุกคนที่อ่านข้อความนี้: ฉันทำไปแล้วและยังมีข้อผิดพลาดอยู่ จากนั้นฉันก็แก้ไขมันอย่างใด: น่าประหลาดใจฉันต้องลบ<dependentAssembly>ส่วนของ Json.Net จาก.configไฟล์ของฉัน การติดตั้งใหม่จะนำกลับมาใหม่หากไม่ได้อยู่ที่นั่นและคุณต้องลบทิ้ง จนกว่าจะมีวิธีการแก้ปัญหาปกติในแพคเกจตัวเองฉันกลัวว่าขั้นตอนด้วยตนเองนี้เป็นสิ่งที่ต้องทำ
Ofer Zelig

@OferZelig คุณควรโพสต์ว่าเป็นคำตอบที่แยกต่างหากเพื่อที่จะได้รับ upvotes (และที่สำคัญกว่านั้นคือความสนใจที่เพิ่มขึ้น) ไม่น้อยเพราะมันเหมาะกับฉันด้วย :)
โอเวนแบล็

@wenBlacker ขอบคุณ แต่เนื่องจากมีคำตอบมากมายอยู่แล้วเหมืองของฉันจะหายไป และคำตอบนี้ค่อนข้างดีเพียงแค่ว่าถ้ามันไม่ทำงานความคิดเห็นของฉันก็จะ "สมบูรณ์" คุณรู้อะไรไหม? ฉันเดาว่าฉันจะแก้ไขคำตอบเดิม สำคัญกว่าการได้รับตัวแทนของตัวเอง
Ofer Zelig

43
ระวังว่าคำสั่งที่โพสต์ในคำตอบจะติดตั้งแพ็กเกจในทุกโครงการในโซลูชันของคุณ ดังนั้นหากคุณใช้แพ็คเกจ Newtonsoft.Json ในหลายโครงการและอาจใช้รุ่นที่แตกต่างกันเพียงดำเนินการคำสั่งด้านบนอาจมีผลกระทบที่ไม่พึงประสงค์
René

แก้ไข! สำหรับฉันฉันมี v6 ติดตั้งในโครงการหนึ่งการติดตั้งจากตัวจัดการแพคเกจนำมาสู่ v7
jv-dev

123

สำหรับทุกคนที่มีปัญหากับรุ่น Newtonsoft.Json v4.5 ลองใช้สิ่งนี้ใน web.config หรือ app.config:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
           <assemblyIdentity name="Newtonsoft.Json"
               publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
           <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
       </dependentAssembly>
    </assemblyBinding>
</runtime>

สำคัญ : ตรวจสอบว่าconfigurationแท็กของไฟล์กำหนดค่าของคุณไม่มีแอตทริบิวต์เนมสเปซ (ตามที่แนะนำในhttps://stackoverflow.com/a/12011221/150370 ) มิฉะนั้นassemblyBindingแท็กจะถูกละเว้น


3
สำหรับฉันการลบเนื้อหาของโฟลเดอร์ช่องเก็บด้วยตนเองหลังจากทำความสะอาด (ซึ่งไม่ว่างเปล่า) ทำเคล็ดลับหลังจากที่ฉันใช้คำตอบนี้
Mikaël Mayer

ขอบคุณสำหรับสิ่งนี้! :)
Kamron K.

ใช้งานได้ดี! ตั้งแต่วันที่ 7/4/15 รุ่นปัจจุบันของ Newtonsoft.Json คือ 7.0.0 ดังนั้นnewVersion="6.0.0.0"จะต้องเปลี่ยนเป็นnewVersion="7.0.0.0"เวอร์ชั่นที่คุณใช้อยู่
Moses Machua

3
ข้อความนั้นบนเนมสเปซ ... ฉันกอดคุณได้ ฉันใช้เวลาหลายชั่วโมงในการทำเช่นนี้โดยไม่รู้ว่าการเปลี่ยนเส้นทางการเชื่อมโยงถูกละเว้นเพราะสิ่งนั้น
Brian

1
หมายเหตุเกี่ยวกับเนมสเปซนั้นสำคัญมากที่มันอาจเป็นคำตอบของมันเอง ขอบคุณมาก.
beawolf

42

จุดสำคัญคือการอ้างอิงรุ่นที่ถูกต้องในไฟล์กำหนดค่าของคุณ

ขั้นตอน;

1- ดูรุ่นของ Newtonsoft.Json.dll ของคุณเป็นอะไรในโครงการอ้างอิงคุณสมบัติรุ่นใดในโฟลเดอร์แพ็คเกจของคุณ (ตัวอย่างเช่นของฉันคือ 7.0.1 และรุ่นที่อ้างอิงคือ 7.0.0.0)

2- ดูว่าโครงการคาดหวังอะไรจากคุณในข้อยกเว้น (ของฉันคือ 6.0.0.0)

3- เพิ่มแอสเซมบลีที่ขึ้นกับไฟล์ config ของคุณตามที่ควรจะเป็น ..

  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json"  publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0"/>
  </dependentAssembly>

ขออภัยสามารถให้คะแนนของคุณเพียงหนึ่งคะแนนเท่านั้น (ตัวอย่างเช่นของฉันคือ 7.0.1 และรุ่นอ้างอิงคือ 7.0.0.0) สร้างความแตกต่างอย่างมาก ฉันจะได้รับมากขึ้น ..... ขอบคุณ :)
Zaker

สิ่งนี้ใช้ได้สำหรับฉัน ฉันอัปเดตเวอร์ชันเป็น 7 แต่มันทำงานจริง ๆ กับเวอร์ชัน 8 ดังนั้นฉันเพิ่งเปลี่ยน newVersion เป็น 8.0 ขอบคุณ!
Keith

แม้ว่าการติดตั้ง 8.0.3 (เหมือนที่ระบุไว้ในตัวจัดการแพคเกจ nuget). dll ภายใต้การอ้างอิงยังคงเป็น 8.0.0 ดังนั้นฉันจึงเปลี่ยนเป็น 8.0.0.0 ใน web.config เรียนรู้วิธีการทำงานเมื่อวานนี้เมื่อฉันเผยแพร่ทุกอย่างและเช้านี้มันไม่ทำงานอีกต่อไป
CularBytes

24

ฉันไม่มีโชคกับวิธีแก้ปัญหาใด ๆ ที่นำเสนอที่นี่ (การถอนการติดตั้งการติดตั้งใหม่การลบการอ้างอิงการสร้างการผูกโยงไดเรคทอรีเป็นต้น) ฉันต้องกลับไปที่ Newtonsoft เวอร์ชันเก่า เวอร์ชั่น 5.0.6 เคยทำงานมาก่อนดังนั้นฉันจึงลองใช้ตัวนั้น ฉันต้องป้อนคำสั่งทั้งสองนี้ใน Package Console:

uninstall-package newtonsoft.json -force

install-package newtonsoft.json -version "5.0.6"

-forceจำเป็นต้องมีตัวเลือกในคำสั่งแรกเพื่อบังคับให้ถอนการติดตั้ง การพึ่งพากับแอสเซมบลีอื่น ๆ ป้องกันการถอนการติดตั้งโดยไม่มี


ทำงานเหมือนจับใจ มีข้อผิดพลาดในโครงการ MVC 4 ของฉัน เกือบจะเปลี่ยนเป็นซีเรียลไลเซอร์
Kees C. Bakker

ขอบคุณฉันต้องเปลี่ยน -version "5.0.6" เป็น -pre: install-package newtonsoft.json -pre
thiago.adriano26

22

ฉันแก้ไขปัญหาการเพิ่มการเชื่อมโยงการเปลี่ยนเส้นทางนี้ไปยังไฟล์. config ของฉัน:

<runtime>
    . . . 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
                culture="neutral" />
            <bindingRedirect oldVersion="4.5.0.0" newVersion="6.0.0.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

ข้อความแสดงข้อผิดพลาดบ่นเกี่ยวกับการไม่หารุ่น 4.5.0.0 รุ่นปัจจุบันของ Newtonsoft.Json คือ 6.0.0.0 ดังนั้นการเปลี่ยนเส้นทางควรเปลี่ยนจาก 4.5 เป็น 6.0 ไม่ใช่ viceversa


ใช่สิ่งนี้แก้ปัญหาของฉันได้ น่าแปลกที่ปริมาณของปัญหา JSON.NET เป็นสาเหตุ .. แต่เมื่อมันไปถึงเครื่องในฝัน ขอบคุณ +1
Piotr Kula

ข้อมูลโค้ดของคุณทำให้ฉันรู้ว่าองค์ประกอบ 'แอสเซมเบลอร์ผูกพัน' หายไป ขอบคุณ
ริกา

21

ฉันคิดว่าคุณกำลังชี้ไปที่เป้าหมายที่ไม่ถูกต้องเปลี่ยนเป็น 4.5 แทนที่จะเป็น 6.0

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
        culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>

สิ่งนี้น่าจะใช้ได้


1
Umbraco 7 ต้องการ 4.5.0.0 ดังนั้นสิ่งนี้จึงช่วยให้มันทำงานได้
MagicalArmchair

19

ฉันใช้เวลาสองสามวันในการพยายามแก้ไขปัญหาที่น่าผิดหวังนี้ ฉันได้ลองทุกสิ่งที่หาได้บนเว็บแล้ว ในที่สุดฉันก็พบว่าข้อผิดพลาดนี้อาจเกิดขึ้นได้ (เช่นในกรณีของฉัน) โดยเป้าหมายโครงการ. Net รุ่นต่าง ๆ (4.5 และ 4.5.1) ในโซลูชันเดียว ตะโกนขั้นตอนการแก้ไขสำหรับฉัน:

  1. ตรวจสอบเวอร์ชัน. Net ของทุกโครงการที่อยู่ในโซลูชันของคุณอีกครั้ง Propertiesเพียงแค่คลิกขวาที่โครงการและไปที่

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

  1. หากเป็นไปได้ให้ตั้ง. net เวอร์ชั่นเดียวกันสำหรับทุกโครงการ ถ้าอย่างน้อยก็ลองเปลี่ยนโปรเจค Startup (สำหรับฉันนี่เป็นอันที่ทำให้เกิดปัญหา)

  2. ลบNewtonsoft.Jsonชุดทั้งหมดออกจากโซลูชัน

    uninstall-package newtonsoft.json -force

  3. อัปเดตทุกNewtonsoft.Jsonเวอร์ชันในpackages.configไฟล์ทั้งหมดเช่นนั้น

    <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net451" />

  4. ติดตั้งใหม่Newtonsoft.Jsonจาก "Package Manager Console" ด้วย:

    install-package newtonsoft.json

  5. สร้างโซลูชันใหม่

(ไม่บังคับ) 7. ถ้าคุณเปลี่ยนโครงการเริ่มต้นให้ส่งคืนอีกครั้ง


12
uninstall-package newtonsoft.json -force
install-package newtonsoft.json

ทำเคล็ดลับสำหรับฉัน :)


1
นี่ก็เป็นการหลอกลวงสำหรับฉันเช่นกัน มันจะอัปเดตไฟล์ webconfig ให้เป็นเวอร์ชั่นที่ถูกต้องโดยอัตโนมัติ
Shaakir

ฉันก็ช่วยได้เช่นกัน
Mike Malter

11

ถ้าคุณใช้หลายโครงการในการแก้ปัญหาเดียวกันและห้องสมุดของการตรวจสอบอื่น ๆ หนึ่งคือทุกโครงการมีรุ่น Newtonsoft.Json เดียวกัน


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

10

เอาชุด Newtonsoft.Json ออกจากการอ้างอิงโครงการและเพิ่มอีกครั้ง คุณอาจลบหรือเปลี่ยน dll โดยไม่ตั้งใจ


สิ่งนี้เข้าใกล้ได้กับโครงการ Xamarin Forms iOS ที่ฉันทิ้งแพ็คเกจ NuGet และเพิ่มใหม่อีกครั้ง ขอบคุณ
สมาชิกวุฒิสภา

9

ผมเขียนลูกค้าบริการ WebAPI REST ดังนั้นสำหรับผมแล้วข้อผิดพลาดนี้เกิดจากการเพิ่มการอ้างอิงถึงSystem.Net.HttpและSystem.Net.Http.Formattingประกอบด้วยตนเองผ่านทางเพิ่มการอ้างอิงเมื่อฉันควรจะได้เพิ่มMicrosoft.AspNet.WebApi.Clientแพคเกจผ่านNuGet ดูคำตอบนี้สำหรับคำถามอื่นด้วย


8

คุณมีไลบรารี JSON.NET 2 เวอร์ชันแตกต่างกันในโซลูชันของคุณ เพื่อแก้ปัญหานี้คุณควรอัปเกรดเป็นรุ่นล่าสุด ทำตามขั้นตอนเหล่านี้:

โซลูชัน 1-Open explorer 2 คลิกขวาที่ชื่อโซลูชันเลือก 3- จัดการแพ็กเกจ Nuget สำหรับโซลูชันอัพเดต 4-Select จากเมนู 5-Update แพ็คเกจ JSON.NET JSON.NET

นี่จะช่วยแก้ปัญหาของคุณ

ลิงค์: ไม่สามารถโหลดไฟล์หรือชุดประกอบ 'Newtonsoft.Json, รุ่น = 7.0.0.0, วัฒนธรรม = เป็นกลาง, PublicKeyToken = 30ad4fe6b2a6aeed' หรือการอ้างอิงอย่างใดอย่างหนึ่ง


วิธีที่ง่ายที่สุดและปลอดภัยที่สุดในการแก้ไขปัญหานี้ ขอบคุณ @mohammad
deanwilliammills

7

ปรับใช้เวอร์ชันที่ถูกต้องกับเครื่อง CI

สิ่งนี้กำลังบอกคุณว่าตัวโหลดแอสเซมบลีพบเวอร์ชันNewtonsoft.Jsonแอสเซมบลีที่แตกต่างกันซึ่งไม่ตรงกับการอ้างอิงที่คุณสร้างในโครงการของคุณ เมื่อต้องการโหลดแอสเซมบลีอย่างถูกต้องคุณต้องปรับใช้แอสเซมบลีที่เคียงข้างกันด้วยรหัสที่คอมไพล์ของคุณหรือติดตั้งแอสเซมบลีรุ่นที่ถูกต้องในเครื่องปลายทาง (เช่นใน GAC)

ทางเลือก: ตรวจสอบให้แน่ใจว่าการกำหนดค่าอยู่ในไฟล์ที่ถูกต้อง

หากคุณต้องการเก็บโซลูชันปัจจุบันและโหลดแอสเซมบลีด้วยเวอร์ชันอื่นตรวจสอบให้แน่ใจว่าการกำหนดค่าที่คุณโพสต์อยู่ใน.configไฟล์ที่ถูกต้อง โปรดจำไว้ว่าไม่มีไม่มีxpto.dll.configDLL ที่โหลดโดยแอปพลิเคชันจะใช้ไฟล์กำหนดค่าของแอปพลิเคชันที่ทำงานอยู่เสมอ


6

โดยปกติการเพิ่มการเปลี่ยนเส้นทางการผูกควรแก้ไขปัญหานี้ แต่มันไม่ทำงานสำหรับฉัน หลังจากสองสามชั่วโมงของการต่อสู้กับศีรษะของฉันฉันรู้ว่ามีแอตทริบิวต์ xmlns ทำให้เกิดปัญหาในเว็บของฉันตั้งค่า หลังจากลบแอ็ตทริบิวต์ xmlns ออกจากโหนดการกำหนดค่าใน Web.config การเปลี่ยนทิศทางการโยงจะทำงานตามที่คาดไว้

http://www.davepaquette.com/archive/2014/10/02/could-not-load-file-or-assembly-newtonsoft-json-version4-5-0-0.aspx


5
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json"
        publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0"/>
  </dependentAssembly>
</assemblyBinding>

ใช้งานได้สำหรับฉัน .... เพียงแค่วางเวอร์ชันที่คุณใช้ใน newVersion เช่น (newVersion = "7.0.0.0")


มีปัญหานี้มาแล้วหลายครั้งแล้ว ขอบคุณมาก.
GutierrezDev

5

ปิดโซลูชัน

เปิดpackages.configและ*.csprojแก้ไขข้อความและลบบรรทัดใด ๆ ที่มี Newtonsoft.Json

Ex:
<Reference Include="Newtonsoft.Json,Version=9.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath> <Private>True</Private> </Reference>

หรือ <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />

เปิดโซลูชันอีกครั้งและติดตั้ง Newtonsoft.Json อีกครั้ง Install-Package Newtonsoft.Json

มันใช้งานได้สำหรับฉัน


มันใช้งานได้บางครั้ง แต่ในการสร้างที่จะเกิดขึ้นปัญหานี้กลับมาอีกครั้งอีกครั้ง
Heemanshu Bhalla

ไม่มีปัญหาหากไม่อัพเดทเลยฮ่าฮ่า สร้างโครงการถังขยะและติดตั้ง Newtonsoft.Json.dll คัดลอก (ไฟล์ dll) และเพิ่มลงในการอ้างอิงโครงการของคุณ
TrươngQuốcKhánh

4

เรามีปัญหาเดียวกันกับที่คุณพูดถึง เรากำลังใช้ nunit เพื่อเรียกใช้การทดสอบผ่าน CI และเรามี nunit ที่เรียกใช้ไฟล์ชื่อ tests.nunit ซึ่งอธิบายรายการของการติดตั้ง dll เพื่อทดสอบ

การติดตั้งการทดสอบแต่ละรายการมีไฟล์ปรับแต่งของตัวเอง แต่เมื่อทำงานผ่านไฟล์ "ทดสอบ วิธีแก้ไขคือเพิ่มการเปลี่ยนเส้นทางการเชื่อมโยงไปยังไฟล์ config ใหม่ "tests.config" ที่อยู่ข้างไฟล์ "tests.nunit"


คุณสามารถทำอย่างละเอียด?
KirstieBallance

4

ฉันมีปัญหาประเภทเดียวกัน และฉันยังแก้ไขได้เพียงแค่การทำดังต่อไปนี้: ไปที่เครื่องมือ > NuGet แพ็คเกจผู้จัดการและเลือกคอนโซลการจัดการแพคเกจ ในที่สุดรันคำสั่งสองคำสั่งต่อไปนี้ :)

  1. ถอนการติดตั้งแพ็คเกจ newtonsoft.json -force
  2. ติดตั้งแพคเกจ newtonsoft.json

4

คุณควรอัพเดตไฟล์ web.config ในเซิร์ฟเวอร์ เมื่อ nuget ติดตั้ง NewtonSoft อัพเดตไฟล์นี้รวมถึงรหัสนี้

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
  </dependentAssembly>
</assemblyBinding>


ในกรณีของฉันที่เป็นวิธีแก้ปัญหาของฉันให้ใส่ app.config "เวอร์ชันการประกอบสามารถเปลี่ยนเส้นทางในแอปพลิเคชันนโยบายผู้เผยแพร่หรือไฟล์การกำหนดค่าเครื่อง"
datps


3

ฉันทำผิดพลาดในการเพิ่มไฟล์. dll NewtonSoft สำหรับ. Net 4.5

โครงการหลักของฉันคือ 4.5 แต่เมื่อฉันเพิ่มโครงการพิเศษลงในโซลูชันของฉันมันเพิ่มอย่างแปลก ๆ เป็นโครงการ. Net 2.0 ... และเมื่อฉันพยายามใช้ NewtonSoft's 4.5 dll กับสิ่งนี้ฉันได้รับ "Newtonsoft.Json ไม่สามารถ พบข้อผิดพลาด "

วิธีแก้ปัญหา (แน่นอน) คือการเปลี่ยนโครงการใหม่นี้จาก. Net 2.0 เป็น 4.5


3

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


3

ฉันมีปัญหาเดียวกันแน่นอนกับรุ่น 7.0.0.0 และ lib ที่ทำให้เกิดปัญหาของฉันคือMicrosoft.Rest.ClientRuntimeซึ่งหมายถึงรุ่นผิดรุ่น (6.0.0.0) ของ Newtonsoft.json แม้จะมีการจัดการการพึ่งพาที่ถูกต้องใน nugget ( ติดตั้ง newtonsoft.json เวอร์ชั่นที่ถูกต้อง (7.0.0.0) แล้ว

ฉันแก้ไขสิ่งนี้โดยใช้การเปลี่ยนเส้นทางด้านบนจาก 6.0.0.0 ถึง 7.0.0.0 (จาก Kadir Can) ในไฟล์ config:

<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0" />

----> หลังจากสองสามวันโดยไม่เปลี่ยนแปลงอะไรเลยมันก็เกิดขึ้นอีกครั้งพร้อมกับข้อผิดพลาดเดียวกัน ฉันติดตั้งเวอร์ชัน 6.0.0.0 n และอัปเดตเป็น 7.0.0.0 แล้วก็ใช้งานได้ดีในขณะนี้


ทำงานให้ฉัน เวอร์ชันที่ติดตั้ง Newtonsoft Json 7.0.1 (เบต้า) แต่การกำหนดค่าที่สร้างขึ้นนั้นชี้ไปที่ 6.0.0.0 ซึ่งไม่ถูกต้อง ขอบคุณ!
Dhanuka777

2

ในกรณีของฉันหลังจากดาวน์โหลดแอสเซมบลีและเพิ่มการอ้างอิงไปยังโครงการฉันแก้ไขได้โดย 'ปลดบล็อก' DLL ก่อนเพิ่มการอ้างอิงไปยังโครงการ

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


2

ไม่มีอะไรจากด้านบนช่วยฉันได้ แต่สิ่งที่แก้ไขได้จริงคือ:

  1. ลบการโยงการพึ่งพาทั้งหมดใน app.config (จากไฟล์ app.config ทั้งหมดในโซลูชัน)
  2. ดำเนินการคำสั่งต่อไปนี้จาก"Package Manager Console"

รับโครงการ - ทั้งหมด | Add-BindingRedirect

  1. สร้างใหม่

การอ้างอิง: http://blog.myget.org/post/2014/11/27/Could-not-load-file-or-assembly-NuGet-Assembly-Redirects.aspx


2

คลิกขวาที่โครงการของคุณเลือกจัดการแพ็คเกจ Nuget พิมพ์ newtonsoft ในช่องค้นหาและติดตั้งเวอร์ชันล่าสุด จากนั้นเปิดแอปของคุณ


2

ฉันกำลังเผชิญกับข้อผิดพลาดเดียวกันและต่อสู้กับมันเป็นเวลาหลายชั่วโมง ฉันมีโครงการเว็บ API ที่ใช้ Newtonsoft.json และอีกโครงการ UnitTest สำหรับโครงการเว็บ API โครงการทดสอบหน่วยยังต้องการการอ้างอิง Newtonsoft.json แต่ในการเพิ่มลิงค์ฉันได้รับข้อยกเว้นข้างต้น

ในที่สุดฉันก็แก้ไขได้โดยการเพิ่มโค้ดด้านล่างใน app.config ของโครงการทดสอบหน่วย:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

<drantsAssembly> <assemblyIdentity name = "Newtonsoft.Json" publicKeyToken = "30AD4FE6B2A6AEED" วัฒนธรรม = "เป็นกลาง" /> <bindingRedirect oldVersion = "0.0.0.0-6.0.0.0" newVersion = "6.0.0.0" /> </dependAssembly>
mukulsharma1146

ฉันมีปัญหาเดียวกันนี้เมื่อฉันอัพเกรด Nestwonsoft.Json ในขณะที่ยังใช้งานอยู่และ WebAPI เวอร์ชันเก่าและสิ่งนี้ก็แก้ไขได้ ขอบคุณ!
Gavin.Paolucci.Kleinow

2

ปัญหาที่ร้ายกาจอีกประการหนึ่งคือการปรากฏว่าการเปลี่ยนเส้นทางการเชื่อมโยงสามารถล้มเหลวได้อย่างเงียบ ๆ หากองค์ประกอบนั้นมีการกำหนดค่าที่ไม่ถูกต้องในองค์ประกอบพึ่งพา

ตรวจสอบให้แน่ใจว่าคุณมีองค์ประกอบเดียวภายใต้แต่ละองค์ประกอบ

ในบางกรณี VS จะสร้างสิ่งนี้:

  <dependentAssembly>
    <assemblyIdentity ...
    <assemblyIdentity ...
  </dependentAssembly>

แทน

  <dependentAssembly>
    <assemblyIdentity ...
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity ...
  </dependentAssembly>

ใช้เวลานานพอสมควรที่ฉันจะรู้ว่านี่เป็นปัญหา!


2

ส่วนด้านล่างเพิ่มลงใน web.config ของคุณ

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
           <assemblyIdentity name="Newtonsoft.Json"
               publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
           <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
       </dependentAssembly>
    </assemblyBinding>
</runtime>

2

หากข้อผิดพลาดหายไปภายในเครื่องและยังคงปรากฏบนเซิร์ฟเวอร์โซลูชันที่ใช้งานได้กับฉันคือการลบโฟลเดอร์ bin และ packages.config และ web.config และอัปโหลดไฟล์เหล่านี้อีกครั้ง

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