ข้อผิดพลาดของบิลด์: คุณต้องเพิ่มการอ้างอิงไปยัง System.Runtime


209

ฉันกำลังเตรียมโซลูชัน ASP.NET MVC 5.1 ใหม่เอี่ยม ฉันกำลังเพิ่มแพ็คเกจ NuGet จำนวนมากและตั้งค่าด้วย Zurb Foundation เป็นต้น

เป็นส่วนหนึ่งของฉันได้เพิ่มการอ้างอิงถึงแพคเกจ NuGet ในบ้านซึ่งเป็น Portable Class Library และฉันคิดว่านี่เป็นสาเหตุของปัญหาในการสร้างเซิร์ฟเวอร์

TeamCity ล้มเหลวในการสร้างด้วย:

ประเภท 'System.Object' ถูกกำหนดไว้ในชุดประกอบที่ไม่ได้อ้างอิง คุณต้องเพิ่มการอ้างอิงไปยังแอสเซมบลี 'System.Runtime, Version = 4.0.0.0

ฉันเริ่มเพิ่มการแก้ไขสำหรับข้อผิดพลาดเดียวกันหรือคล้ายกันเมื่อรวบรวมเว็บเพจของมีดโกนการแก้ไขที่อยู่ใน web.config

<compilation ... >
  <assemblies>
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </assemblies>
</compilation>

อย่างไรก็ตามปัญหายังไม่ได้รับการแก้ไข

คำตอบ:


216

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

<compilation debug="true" targetFramework="4.5"/>

เมื่อขยายแล้วฉันก็เพิ่ม XML การกำหนดค่าใหม่ต่อไปนี้ตามที่ฉันสั่ง

  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>

แท็ก web.config สุดท้ายควรมีลักษณะดังนี้:

<compilation debug="true" targetFramework="4.5">
  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
</compilation>

2
ปัญหานี้พุ่งเข้าสู่โครงการ MVC ที่กำหนดเป้าหมายเป็น 4.52 ไม่มี PCL ที่รู้จัก แต่มีแพ็คเกจ nuGet จำนวนมาก ฉันเชื่อว่าการถอนการติดตั้ง VS2013 ทำให้เกิดสิ่งนี้ แต่ฉันไม่ทราบว่าเป็นความจริง เกิดข้อผิดพลาดเฉพาะใน Views ที่อ้างอิง X-PagedList การเพิ่มการอ้างอิงถึงโครงการ web.config (ไม่ใช่มุมมอง web.config) แก้ไข
— เกร็กเทอเรล

1
@GregTerrell ฉันมีปัญหาตรงนี้หลังจากอัปเกรดจาก X.PagedList เวอร์ชันเก่า น่าผิดหวังมาก การเพิ่มการอ้างอิงใช้งานได้แล้วสิ่งที่ฉันทำถูกลบ (เปลี่ยนชื่อ) .vsโฟลเดอร์หลังจากปิดโครงการเปิดใหม่ลบweb.configรายการและตอนนี้มันสร้างและทำงานได้ดี
— Mardoxx

@Mardoxx ฉันมีปัญหาเดียวกัน เป็นปัญหากับ VS หรือ X.PagedList หรือไม่ หากเป็นข้อผิดพลาด VS ฉันสามารถแก้ไข web.config ได้ แต่ฉันไม่ต้องการแก้ไขไฟล์. config หากปัญหาเกิดขึ้นกับ X.PagedList
— Jecoms

@ Jecoms ฉันตอบปัญหา github ของคุณ :) github.com/kpi-ua/X.PagedList/issues/49#issuecomment-243515362
— Mardoxx

3
มีข้อผิดพลาดนี้หลังจากติดตั้ง MoreLINQ ลงในโครงการ. Net 4.5.1 ของฉัน คำตอบนี้แก้ไขได้
— Chris Moschini

125

การเพิ่มการอ้างอิงถึงแอสเซมบลี System.Runtime.dll นี้แก้ไขปัญหา:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\System.Runtime.dll

แม้ว่าไฟล์นั้นในเส้นทางที่ชัดเจนนั้นจะไม่มีอยู่ในเซิร์ฟเวอร์การสร้าง

ฉันจะโพสต์กลับพร้อมข้อมูลเพิ่มเติมเมื่อฉันพบเอกสารบางอย่างเกี่ยวกับ PCL และอาคารเหล่านี้

ปรับปรุง

ใช่ไม่มีอะไรมากเลยในชุดประกอบซุ้มบนอินเทอร์เน็ตทั้งหมด

Google:

(Facades OR Facade) Portable Library site:microsoft.com

2
หากคุณไม่พบไฟล์ dll ที่โฟลเดอร์ที่ระบุคุณสามารถติดตั้ง Windows SDK ตามที่อธิบายไว้: stackoverflow.com/a/14517992/3918598
— user3918598

ขอบคุณ ลิงก์ด้านบนใช้งานได้หลังจากติดตั้ง 4.5.1 SDK
— Matt Beckman

40
ขณะนี้มีบทความ KB เกี่ยวกับฝ่ายสนับสนุนของ Microsoftที่จัดการเรื่องนี้
— Peter Majeed

1
@PeterMajeed คุณควรโพสต์ความคิดเห็นนั้นเป็นคำตอบที่นี่ ขอบคุณมากสำหรับคำแนะนำ!
— julealgon

3
ฉันต้องตั้งค่า 'คัดลอกภายใน' เป็นจริงเพื่อให้ทำงานได้
— Phate01

28

วิธีเดียวที่เหมาะกับฉัน เพิ่มชุดประกอบลงใน web.config

<compilation debug="true" targetFramework="4.5">
  <assemblies>     
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />   
  </assemblies>
</compilation>

1
ขอบคุณ Lorena! ทำงานให้ฉัน
— Annia Martinez

ทำงานหนึ่งซับไม่ขึ้นอยู่กับเส้นทางไปยัง
— Ivan Zverev

คำตอบนี้เหมือนกับคำตอบที่ได้รับการโหวตสูงสุดโดย @Baahubali
— Jesper Mygind

27

@ ความคิดเห็นของ PeterMajeed ในคำตอบที่ยอมรับช่วยให้ฉันมีปัญหาที่เกี่ยวข้อง ฉันไม่ได้ใช้ไลบรารี่แบบพกพา แต่มีข้อผิดพลาดของบิลด์เดียวกันในการติดตั้ง Windows Server 2012 ใหม่ซึ่งฉันใช้ TeamCity

การติดตั้งMicrosoft .NET Framework 4.5.1 Developer Packดูแลปัญหา (หลังจากติดตั้งMS Build Toolsแยกต่างหาก)


5
ความคิดใด ๆ ที่จะทำกับ 4.6? ฉันไม่เห็นกลุ่มนักพัฒนาเลย
— georgiosd

4
ฉันมีทั้งแพ็ค 4.5.1 และ 4.5.2 dev และยังคงได้รับข้อผิดพลาดนี้ ไอเดีย? ฉันไม่ต้องการอ้างอิงในโครงการ 25 ทั้งหมดของฉัน ด้วยเหตุผลบางอย่างอื่น ๆ 25 ไม่ต้องการมัน
— abatishchev

คำถามที่ดี - ฉันยังไม่ได้จัดการกับ 4.5.2 หรือ 4.6 อย่างน้อยจากจุดยืนการสร้างอัตโนมัติ
— sfuqua

ฉันเดาว่าถ้าคุณติดจริงๆคุณสามารถเปิด Visual Studio Community Service Edition ฟรีและทำให้เป็นปัจจุบันอยู่เสมอ
— ลุค Puplett

ฉันไม่เข้าใจว่าทำไมต้องติดตั้งชุดผู้พัฒนาเหล่านี้ ฉันติดตั้ง VS2013 Pro มันยังไม่เพียงพอหรือ แต่มันแก้ไขปัญหาได้ที่นี่ ขอบคุณ
— Mike de Klerk

10

ฉันมีปัญหานี้ในการแก้ปัญหาบางอย่างใน VS 2015 (ไม่ใช่ MVC แม้ว่า) และแม้แต่ในโซลูชันเดียวกันบนเวิร์กสเตชันเครื่องเดียว แต่ไม่ได้อยู่ในที่อื่น ข้อผิดพลาดเริ่มปรากฏขึ้นหลังจากเปลี่ยน. NET version เป็น 4.6 และการอ้างอิง PCL

วิธีแก้ปัญหานั้นง่าย: ปิดโซลูชันและลบโฟลเดอร์. vs ที่ซ่อนอยู่ในโฟลเดอร์เดียวกับโซลูชัน

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

สำหรับ TeamCity ฉันไม่สามารถพูดได้เนื่องจากการกำหนดค่าของฉันไม่เคยมีปัญหา แต่ให้แน่ใจว่าคุณรีเซ็ตแคตตาล็อกการทำงานเป็นส่วนหนึ่งของความพยายามในการดีบักของคุณ


6

มันเป็นปัญหาเก่า แต่วันนี้ฉันต้องเผชิญเพื่อแก้ไขไปป์ไลน์การสร้างบนเซิร์ฟเวอร์รวมอย่างต่อเนื่องของเรา เพิ่ม

<Reference Include="System.Runtime" />

.csprojไฟล์ของฉันแก้ไขปัญหาให้ฉันได้

บริบทเล็กน้อย: โครงการที่สนใจเป็นโครงการ. Net Framework 4.6.1 แบบเต็มโดยไม่มีปัญหาการสร้างบนเครื่องพัฒนา ปัญหาปรากฏขึ้นเฉพาะบนเซิร์ฟเวอร์การสร้างซึ่งเราไม่สามารถควบคุมได้อาจเป็นเพราะ SDK รุ่นอื่นหรือสิ่งที่คล้ายกัน

การเพิ่มข้อเสนอที่<Referenceแก้ไขข้อผิดพลาดการสร้างที่ราคาของการเตือนการอ้างอิงที่ขาดหายไป (สามเหลี่ยมสีเหลืองในรายการเพิ่มในต้นไม้การอ้างอิง) ใน Visual Studio

ฉันหวังว่านี่จะช่วยผู้คนในสถานการณ์ที่คล้ายกัน ...


แก้ไขให้ฉันด้วยในบริบทที่คล้ายคลึงกัน
— Nicola Celiento

3

ติดตั้ง. NET Runtime และชุดการกำหนดเป้าหมายสำหรับ. NET ที่คุณกำลังกำหนดเป้าหมาย

นักพัฒนาซอฟต์แวร์เป็นเพียงสองสิ่งที่รวมเข้าด้วยกัน แต่ ณ วันนี้ดูเหมือนจะไม่มีเวอร์ชั่น 4.6 ดังนั้นคุณจะต้องติดตั้งสองรายการแยกต่างหาก

สามารถดาวน์โหลดได้ที่นี่: http://blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx#


3

ฉันยังประสบปัญหานี้พยายามที่จะเรียกใช้โครงการ ASP .NET MVC หลังจากการอัพเดทเล็กน้อยถึง codebase ของเราแม้ว่ามันจะรวบรวมโดยไม่มีข้อผิดพลาด:

ข้อความแสดงข้อผิดพลาดของคอมไพเลอร์: CS0012: ประเภท 'System.Object' ถูกกำหนดไว้ในชุดประกอบที่ไม่ได้อ้างอิง คุณต้องเพิ่มการอ้างอิงถึงแอสเซมบลี 'System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'

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

เตือน CS1685:ประเภทที่กำหนดไว้ล่วงหน้า 'System.Runtime.CompilerServices.ExtensionAttribute' ถูกกำหนดไว้ในแอสเซมบลีหลายในนามแฝงส่วนกลาง ใช้คำนิยามจาก 'c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ mscorlib.dll'

c: \ Users \ Admin \ Software Development \ source-control \ Binaries \ Publish \ WebApp \ Views \ Account \ Index.cshtml (35,20): ข้อผิดพลาด CS0012: ประเภท 'System.Object' ถูกกำหนดไว้ในชุดประกอบที่เป็น ไม่ได้อ้างอิง คุณต้องเพิ่มการอ้างอิงถึงแอสเซมบลี 'System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'

c: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files \ meseems.webapp \ 68e2ea0f \ 8c5ee951 \ assembly \ dl3 \ 52ad4dac \ 84698469_3bb3d401 \ System.Collections.Immutable.DL: (ที่ตั้งของสัญลักษณ์ที่เกี่ยวข้อง ข้อผิดพลาดก่อนหน้า)

เห็นได้ชัดว่าแพคเกจใหม่ที่เพิ่มเข้ามาในโครงการของเราคือการอ้างอิง. NET Framework รุ่นเก่ากว่าทำให้เกิด "คำจำกัดความในหลายแอสเซมบลี" (CS1685) ซึ่งนำไปสู่ข้อผิดพลาดคอมไพเลอร์ดูมีดโกนที่รันไทม์

ฉันลบแพ็กเกจที่เข้ากันไม่ได้ (System.Collections.Immutable.dll) และปัญหาหยุดเกิดขึ้น แต่ถ้าแพคเกจไม่สามารถเอาออกในโครงการของคุณคุณจะต้องพยายามตอบ Baahubali ของ


2

บนเซิร์ฟเวอร์ Tfs 2013 build ของเราฉันมีข้อผิดพลาดเดียวกันในโครงการทดสอบ กับโครงการเว็บหลักที่ทำงานบน. Net 4.5.1

ฉันติดตั้งแพ็คเกจ nuGet ของ System Runtime และเพิ่มการอ้างอิงจาก packages \ System.Runtime.4.3.0 \ ref \ net462 \ System.Runtime.dll

ที่แก้ไขมันสำหรับฉัน


ที่อาจจะไม่ได้ทำงานตั้งแต่คุณบอกให้ใช้ .NET 4.6.2 DLL กับโครงการ .NET 4.5.1
— คริส Marisic

1
.. และมันก็ใช้ได้ผลสำหรับฉันด้วย ไม่มีตัวเลือกเนื่องจากโฟลเดอร์ ... \ 45 \ ... มีไฟล์ stub เท่านั้นที่เรียกว่า _._
— nathanchere



1

ฉันมีปัญหาในการแก้ปัญหาด้วยโครงการ Web API และโครงการห้องสมุดหลายแห่ง หนึ่งในโครงการห้องสมุดกำลัง borking on build โดยมีข้อผิดพลาดที่กล่าวว่าแอตทริบิวต์ Unity ไม่ใช่แอตทริบิวต์ "ที่ถูกต้อง" และข้อผิดพลาดหนึ่งข้อกล่าวว่าฉันต้องการอ้างอิง System.Runtime

หลังจากค้นหามากให้ทำการติดตั้ง 4.5.2 Developer Pack ใหม่อีกครั้ง แต่ไม่มีอะไรทำงานฉันคิดว่ามันอาจจะเป็นเวอร์ชั่นที่ไม่ตรงกัน ดังนั้นฉันจึงดูคุณสมบัติของทุกโครงการและหนึ่งในห้องสมุดฐานมากคือการกำหนดเป้าหมาย 4.5 ในขณะที่อีกอันหนึ่งกำลังกำหนดเป้าหมาย 4.5.2 ฉันเปลี่ยนสิ่งนั้นเป็นเป้าหมาย 4.5.2 และข้อผิดพลาดก็หายไป


1

ฉันคัดลอกไฟล์ "C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5.1 \ Facades \ system.runtime.dll" ไปยังโฟลเดอร์ bin ของเซิร์ฟเวอร์การผลิตซึ่งจะช่วยแก้ปัญหาได้


อีกวิธีคือเพิ่มการอ้างอิงไปยังแอสเซมบลีนี้ในโครงการและตั้งค่าการคัดลอกภายใน = จริง
— John Mc

0

ติดตั้งhttps://www.microsoft.com/en-us/download/details.aspx?id=49978 Microsoft .NET Framework 4.6.1 Developer Pack และเพิ่มบรรทัดของรหัสนี้ในไฟล์ Web.config

<compilation debug="true" targetFramework="4.5">
          <assemblies>
            <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
          </assemblies>
        </compilation>

0

สำหรับฉันช่วยเพียงบรรทัดรหัสนี้:

Assembly.Load("System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");


-1

การลบการอ้างอิงเหนือ Nuget Package Manager และการเพิ่มอีกครั้งช่วยแก้ปัญหาสำหรับฉัน

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