ข้อผิดพลาดของบิลด์: คุณต้องเพิ่มการอ้างอิงไปยัง 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.