ประเภทผู้ให้บริการ CodeDom“ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider” ไม่สามารถระบุตำแหน่งได้


159

เป็นโครงการ WebApi ที่ใช้ VS2015

ขั้นตอนในการทำซ้ำ:

  1. สร้างโครงการ WebApi ที่ว่างเปล่า
  2. เปลี่ยนเส้นทางสร้างผลลัพธ์จาก "bin \" เป็น "bin \ Debug \"
  3. วิ่ง

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

ทุกอย่างทำงานได้อย่างสมบูรณ์จนกว่าฉันจะเปลี่ยนเส้นทางสร้างผลลัพธ์จาก "bin \" เป็น "bin \ Debug \" อันที่จริงแล้วเส้นทางออกอื่น ๆ ที่ไม่ใช่ "bin \" จะไม่ทำงาน

สิ่งหนึ่งที่เพิ่มเติมเล็กน้อยคือการมีเส้นทางออกไปยังที่อื่นจะทำงานได้ตราบใดที่ฉันออกจากการสร้างใน "bin \"

โปรดช่วยเสนอวิธีแก้ปัญหานี้ ฉันเดาว่าจะมีปัญหาเรื่องการใช้งานจริง


ฉันขอถามได้ไหมว่าทำไมคุณถึงเปลี่ยนเส้นทางออกของแอปพลิเคชันเว็บ ขอบคุณ.
X-Mao

ข้อยกเว้นนี้จะเกิดขึ้นกับผมทุกครั้งที่ผมรีเฟรชวิ่งก่อนหน้านี้ ASP.NET MVC applicaiton ช่วง comilation
Nikolay Kostov

สิ่งเดียวกันเกิดขึ้นกับฉัน มันเริ่มต้นหลังจากที่ฉันเพิ่มการอ้างอิงไปยังไลบรารี. dll สองสามแห่ง ฉันแก้ไขโดยการถอนการติดตั้งและติดตั้งไลบรารีอีกครั้ง และไม่รู้เลยว่าทำไมสิ่งนี้ถึงเกิดขึ้นได้ทุกอย่าง ..
Letie Techera

คำตอบ:


127

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

เมื่อต้องการแก้ไขปัญหานี้คุณจะต้องลบคอมไพเลอร์โรสลินจากแม่แบบโครงการ การลบ Roslyn ไม่ควรส่งผลกระทบต่อฟังก์ชันการทำงานของรหัสของคุณ มันใช้ได้ดีสำหรับฉันและโครงการอื่น ๆ (C # 4.5.2) ที่ฉันทำงานอยู่

ทำตามขั้นตอนต่อไปนี้:

  1. ลบออกจากแพคเกจ Nuget ดังต่อไปนี้โดยใช้บรรทัดคำสั่งที่แสดงด้านล่าง ( หรือคุณสามารถใช้ GUI ของผู้จัดการแพคเกจ Nuget โดยคลิกขวาบนโซลูชันโครงการรูทและลบออก )

    PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
    PM> Uninstall-package Microsoft.Net.Compilers
    
  2. ลบโค้ดต่อไปนี้จากแฟ้ม Web.config ของคุณและเริ่มต้น IIS ( ใช้วิธีนี้เฉพาะเมื่อขั้นตอนที่ 1 ไม่สามารถแก้ปัญหาของคุณได้ )

    <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
    


4
ฉันติดอยู่ที่ "ข้อผิดพลาดเซิร์ฟเวอร์ใน '/' แอปพลิเคชัน" ประมาณหนึ่งวันแล้ว ฉันกำลังรวบรวมแอปพลิเคชัน Hello World แบบง่ายใน Visual Studio 2015 และปรับใช้กับเว็บเซิร์ฟเวอร์และรับข้อผิดพลาดนี้ การลบบรรทัด <compiler> ด้านบนทำให้ปัญหานี้หายไป ฉันต้องการทราบว่าสิ่งนี้เกิดขึ้นได้อย่างไรบนโลกและมีวิธีแก้ปัญหาที่ดีกว่านี้หรือไม่ ฉันคิดว่ามันค่อนข้างไม่น่าเชื่อว่าคุณไม่สามารถปรับใช้แอป Hello World ด้วยวิธีนี้โดยไม่กระทบกับปัญหามันเหมือน MS ไม่ทำการทดสอบใด ๆ : -)
user2728841

4
ในการเปิดใช้งาน Roslyn คุณสามารถดูบทความต่อไปนี้ การเปิดใช้งาน. NET Compiler Platform (“ Roslyn”) ในแอปพลิเคชัน ASP.NET เหตุใดการรวบรวม Roslyn ใน ASP.NET จึงเป็นเช่นนั้น การเปิดใช้งานคอมไพเลอร์ Roslyn ใหม่ในแอปพลิเคชัน ASP.NET ของคุณจะส่งผลให้เกิดประโยชน์หลักสองประการ: * การสนับสนุนสำหรับคุณสมบัติภาษาใหม่ * การเริ่มต้นแอปพลิเคชันที่ดีขึ้น / เวลารวบรวมล่วงหน้า
vibs2006

1
เมื่อฉันสร้างโครงการเว็บใหม่มันมาพร้อมกับการอ้างอิงเหล่านั้นแล้ว ทำไมพวกเขาติดตั้งโดยค่าเริ่มต้นวัตถุประสงค์ของพวกเขาคืออะไร? นอกจากนี้สำหรับความเข้าใจของฉัน Roslyn เป็นคอมไพเลอร์ C # ใหม่ การลบออกไม่ทำลาย Visual Studio อย่างไร
Jens Mander

@JensMander ทั้งคู่เป็นการรวบรวม runtimes ใน IIS เราต้องเปิดใช้งาน Roslyn Compiler ด้วยตนเอง โปรดดูลิงค์ในความคิดเห็นก่อนหน้าของฉันเกี่ยวกับบทความ'Enabling the .NET Compiler Platform.
vibs2006

ฉันมีข้อผิดพลาดเหมือนกันในที่สุดก็อัพเดตแพ็คเกจล่าสุดสำหรับ Microsoft.CodeDom.Providers.DotNetCompilerPlatform ที่แก้ไขแล้วสำหรับฉัน
Red

47

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

ฉันมีปัญหาเดียวกัน เห็นได้ชัดว่าคอมไพเลอร์ .NET GACไม่ได้โหลดไป สิ่งที่ฉันทำเพื่อแก้ไขคือ:

ครั้งแรกในประเภทคอนโซลแพ็คเกจผู้จัดการ:

PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

ตอนนี้ด้วยเหตุผลบางอย่างสุภาพบุรุษผู้ดีใน Microsoft ได้ตัดสินใจที่จะไม่ติดตั้งลงใน GAC สำหรับเรา คุณสามารถทำได้ด้วยตนเองโดยการเปิดพรอมต์คำสั่งสำหรับนักพัฒนาและพิมพ์:

gacutil -i "C:\*PATH TO YOUR APP CODE*\bin\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll"

ข้อสรุป

Microsoft พยายามสนับสนุนให้ทุกคนทำทุกอย่างด้วย nugets ซึ่งอาจใช้ได้โดยไม่มีข้อบกพร่องเป็นครั้งคราวที่คุณพบกับระบบ nuget ลองใช้โครงการเดียวกันกับโซลูชันที่แตกต่างกันโดยบังเอิญ (หรือไม่) อัปเดตหนึ่งในหลาย ๆ อันที่มันใช้กับหนึ่งในนั้นและถ้าคุณโชคร้ายคุณจะเห็นสิ่งที่ฉันหมายถึงเมื่อคุณพยายามสร้างโซลูชันอื่น ในทางกลับกันการวางไฟล์ใน GAC อาจทำให้เกิดปัญหาในอนาคตเนื่องจากคนมักจะลืมสิ่งที่พวกเขาวางไว้ที่นั่นและเมื่อตั้งค่าสภาพแวดล้อมใหม่ที่พวกเขาลืมที่จะรวมไฟล์เหล่านี้ อีกวิธีหนึ่งที่เป็นไปได้คือการวางไฟล์ในโฟลเดอร์กลางสำหรับบุคคลที่สาม (แม้ว่าจะเป็นเรื่องแปลกที่จะเรียกคอมไพเลอร์บุคคลที่สาม) ซึ่งสร้างปัญหาของการอ้างอิงที่ไม่สมบูรณ์เมื่อทำการตั้งค่าสภาพแวดล้อมใหม่ หากคุณตัดสินใจที่จะติดตั้ง dll ไปยัง GAC ใช้ความระมัดระวังและจำไว้ว่าคุณทำเช่นนั้น ถ้าคุณทำไม่ได้ให้ดาวน์โหลด nuget สำหรับแต่ละโครงการอีกครั้งและรับข้อผิดพลาดที่น่ารำคาญทั้งหมดที่เกิดจากมัน (อย่างน้อยก็เคยเกิดขึ้นเมื่อในที่สุดฉันก็เบื่อมันและเพิ่งวางไฟล์ใน GAC) ทั้งสองวิธีอาจทำให้คุณปวดหัวและสร้างปัญหามันเป็นเพียงคำถามที่คุณต้องการจัดการกับปัญหา Microsoft แนะนำให้ใช้ระบบ nuget และโดยทั่วไปจะเป็นการดีที่จะฟังพวกเขามากกว่าโปรแกรมเมอร์ที่ไม่รู้จักใน SO เว้นแต่คุณจะป่วยด้วยระบบ nuget และใช้ในการจัดการกับ GAC นานพอที่จะเป็นทางเลือกที่ดีกว่า สำหรับคุณ. ดาวน์โหลด nuget สำหรับแต่ละโครงการอีกครั้งและรับข้อผิดพลาดที่น่ารำคาญทั้งหมดที่เกิดจากมัน (อย่างน้อยก็เคยเกิดขึ้นเมื่อในที่สุดฉันก็เบื่อมันและเพิ่งวางไฟล์ใน GAC) ทั้งสองวิธีอาจทำให้คุณปวดหัวและสร้างปัญหามันเป็นเพียงคำถามที่คุณต้องการจัดการกับปัญหา Microsoft แนะนำให้ใช้ระบบ nuget และโดยทั่วไปจะเป็นการดีที่จะฟังพวกเขามากกว่าโปรแกรมเมอร์ที่ไม่รู้จักใน SO เว้นแต่คุณจะป่วยด้วยระบบ nuget และใช้ในการจัดการกับ GAC นานพอที่จะเป็นทางเลือกที่ดีกว่า สำหรับคุณ. ดาวน์โหลด nuget สำหรับแต่ละโครงการอีกครั้งและรับข้อผิดพลาดที่น่ารำคาญทั้งหมดที่เกิดจากมัน (อย่างน้อยก็เคยเกิดขึ้นเมื่อในที่สุดฉันก็เบื่อมันและเพิ่งวางไฟล์ใน GAC) ทั้งสองวิธีอาจทำให้คุณปวดหัวและสร้างปัญหามันเป็นเพียงคำถามที่คุณต้องการจัดการกับปัญหา Microsoft แนะนำให้ใช้ระบบ nuget และโดยทั่วไปจะเป็นการดีที่จะฟังพวกเขามากกว่าโปรแกรมเมอร์ที่ไม่รู้จักใน SO เว้นแต่คุณจะป่วยด้วยระบบ nuget และใช้ในการจัดการกับ GAC นานพอที่จะเป็นทางเลือกที่ดีกว่า สำหรับคุณ.


41
ไม่ควรอยู่ใน GAC จุดทั้งหมดที่อยู่เบื้องหลังวิธีการ Nuget คือการให้โครงการของคุณใช้ C # หรือ VB.NET รุ่นใดรุ่นหนึ่งโดยไม่เปลี่ยนแปลงอะไรบนระบบโฮสต์ ดูโพสต์นี้จาก Damian Edwards ของ MSFT: blogs.msdn.microsoft.com/webdev/2014/05/12/ …
Sudhanshu Mishra

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

5
-1 สำหรับข้อสังเกตของ Microsoft มันเหมือนกับว่ามันเจ๋งที่จะทำวันนี้ BTW นักเก็ตมีข้อดีมากมายที่ทำให้พวกเขาได้รับความนิยมอย่างมากซึ่งคุณไม่สนใจ ทีนี้ลองนึกดูว่าสุภาพบุรุษของ Microsoft จะคิดอย่างไรกับเรื่องนี้
Fabio Milheiro

2
@YuvalPerelman Microsoft ทำเรื่องทำลายล้างจำนวนมากในช่วง 3-4 ปีที่ผ่านมา (เช่น Visual Studio ที่มีความเสถียรทำให้เกิดผลิตภัณฑ์คุณภาพต่ำมาก) บางครั้งฉันก็สวดภาวนาว่าฝ่ายบริหารทั้งหมดของแผนกพัฒนาจะถูกไล่ออก อย่างไรก็ตามมันไม่ได้เป็นอย่างนั้น!
Maris

2
GAC การพึ่งพาสิ่งนี้เป็นสิ่งที่ยอดเยี่ยมที่สุดที่ฉันเคยเห็นในขณะนี้
Svend

31

เพียงแค่เพิ่มแพคเกจ nuget ต่อไปกับโครงการของคุณ Microsoft.CodeDom.Providers.DotNetCompilerPlatform-

มีปัญหาเดียวกัน


ระวังตัวหน่อย มันเขียนทับ 'compilerOptions' ภายใน web.config ดังนั้นให้แน่ใจว่าคุณบันทึกค่าที่กำหนดเองใด ๆ ก่อนที่จะติดตั้ง
Radderz

19

ฉันมีปัญหาเดียวกับที่แอพของฉันทำงานใน Vs2013 แต่ได้รับข้อผิดพลาดหลังจากอัปเดตเป็น Vs2015

  1. ใน Vs2015 คลิกขวาที่โฟลเดอร์อ้างอิงของโครงการเพื่อเปิด NuGet Package Manager
  2. ภายใต้แท็บเรียกดูค้นหา "DotNetCompilerPlatform" และติดตั้ง "Microsoft.CodeDom.Providers.DotNetCompilerPlatform" lib

2
ขอบคุณสำหรับเคล็ดลับคลิกขวาที่โฟลเดอร์อ้างอิงของโปรเจ็กต์เพื่อเปิดตัวจัดการแพ็คเกจ
garyh

3
ลองถอนการติดตั้งก่อนจากนั้นติดตั้งอีกครั้งใน NuGet ที่ทำงานให้ฉัน
Matt

คุณเป็นตำนาน
Mo D Genesis

16

ฉันรู้ว่ามันเป็นเธรดเก่า แต่ฉันต้องการจะชี้ปัญหารุ่นที่เป็นไปได้ของ DotNetCompilerPlatform.dll, f อดีต หลังการอัพเดท โปรดตรวจสอบว่าไฟล์ Web.config ที่สร้างขึ้นใหม่นั้นแตกต่างจาก web.config ที่คุณเปิดตัวหรือไม่โดยเฉพาะในส่วนของ system.codedom ในกรณีของฉันมันเป็นรุ่นที่เปลี่ยนจาก 1.0.7 เป็น 1.0.8 dll ใหม่ถูกคัดลอกไปยังเซิร์ฟเวอร์แล้ว แต่ฉันไม่ได้เปลี่ยน web.config เก่า (ด้วยการตั้งค่าพิเศษของเซิร์ฟเวอร์):

<pre>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" />
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>
</pre>

หลังจากฉันอัปเดตทั้งสองบรรทัดแล้วข้อผิดพลาดก็หายไป


1
ผมมีปัญหากับ DotNetCompilerPlatform ทุก เดียว เวลาฉันปรับปรุงมัน
LarryBud

2
หากคุณลบแอตทริบิวต์ version จะใช้งานได้และป้องกันข้อผิดพลาดจากการเพิ่มอีกครั้งในการอัปเดตครั้งต่อไป
MiguelSlv

ปัญหาเดียวกันฉันเพิ่งยกเว้นฉันต้องอัปเดตจาก2.0.0เป็น2.0.1
Rory McCrossan

12

ตามขั้นตอนการทำซ้ำของคุณฉันคิดว่าการเปลี่ยนเส้นทางออกในคุณสมบัติของแอปพลิเคชันเป็นการเปลี่ยนแปลงเพียงอย่างเดียวของคุณหลังจากที่คุณสร้างแอปพลิเคชัน สิ่งเดียวที่การเปลี่ยนแปลงนี้ทำก็คือการบอกให้ Visual Studio ใส่ชุดประกอบผลลัพธ์ของ MSBuild ลงในโฟลเดอร์ใหม่ อย่างไรก็ตาม ณ รันไทม์ ASP.Net จะไม่มีแนวคิดใด ๆ ว่าควรโหลดแอสเซมบลีจากโฟลเดอร์ใหม่นี้แทนโฟลเดอร์ \ bin

คำตอบนี้แสดงวิธีการเปลี่ยนไดเรกทอรีสร้างผลลัพธ์ของแอปพลิเคชัน WebApi ในการรับข้อผิดพลาดเดียวกันที่แน่นอนแสดงในโพสต์นั้นคุณจะต้องแสดงความคิดเห็นในส่วน <system.codedom> ทั้งหมดใน web.config จากนั้นคุณสามารถทำตามคำแนะนำเพื่อเปลี่ยนพา ธ เอาต์พุต

หลังจากที่คุณได้รับใบสมัครแล้วคุณสามารถยกเลิกการคอมเม้นต์ส่วน <system.codedom> หากคุณไม่ได้ใช้ไวยากรณ์ใหม่ C # 6 ในแอปพลิเคชันของคุณคุณสามารถถอนการติดตั้ง Microsoft.CodeDom.Providers.DotNetCompilerPlatform จากแอปพลิเคชันของคุณได้ มิฉะนั้นคุณอาจต้องการเพิ่มบรรทัดคำสั่งต่อไปนี้ในเหตุการณ์หลังสร้าง

xcopy /Q /Y "$(TargetDir)roslyn\*.*" "$(TargetDir)..\roslyn\"

ผู้ให้บริการ CodeDom ใหม่จะมองหาโฟลเดอร์ "\ roslyn" ใน \ bin เสมอ คำสั่งดังกล่าวทำงานเป็นวิธีแก้ปัญหาและคัดลอกโฟลเดอร์ \ roslyn จากโฟลเดอร์ออกใหม่ของคุณไปยัง \ bin

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


10

วิธีที่ง่าย - โครงการ> จัดการแพ็คเกจ NuGet ... > เรียกดู (แท็บ)>ในอินพุตการค้นหาตั้งค่านี้: Microsoft.CodeDom.Providers.DotNetCompilerPlatform

คุณสามารถติดตั้งหรืออัปเดตหรือถอนการติดตั้งและติดตั้งคอมไพเลอร์นี้

DotNetCompilerPlatform


8

ทางออกที่เป็นไปได้อื่น:

รีสตาร์ท Visual Studio Instance ของคุณด้วยสิทธิ์ของผู้ดูแลระบบ

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


4

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


แปลงเป็นแอปพลิเคชันทั้งหมดที่ฉันต้องการ (เป็นโครงการใหม่ที่ไม่เคยเผยแพร่มาก่อน)
Patrick

การใช้โฟลเดอร์ย่อยเป็นปัญหาของฉันเช่นกันดังนั้นฉันย้ายไปยังโฟลเดอร์ฐานและสิ่งต่าง ๆ เริ่มทำงานได้
J_L

4

ในกรณีของฉันสิ่งนี้เกิดขึ้นเมื่อฉันเปลี่ยนการอนุญาตของโฟลเดอร์แอปพลิเคชันและบัญชี IIS_IUSRS ถูกลบออก หลังจากฉันเพิ่ม IIS_IUSRS อีกครั้ง (ตัวจัดการ IIS -> YourWebApp -> แก้ไขสิทธิ์ -> เพิ่ม IIS_IUSRS) ไปยังโฟลเดอร์แอปพลิเคชันและใช้งานได้


ฉันได้เพิ่มการอนุญาต IUSR แต่ก็ไม่เพียงพอ ฉันต้องเพิ่ม "IIS_IUSRS" แล้วก็ใช้งานได้
zacharydl

3

นี่คือวิธีที่ฉันแก้ไขมัน:

  1. ลบbinโฟลเดอร์ในไดเรกทอรีโครงการ
  2. Build Solutionคลิกที่ ในVS2017 (เรียกใช้ในฐานะผู้ดูแลระบบ)> สร้าง> สร้างโซลูชัน


2

ฉันมีโครงการจำนวนมากในการแก้ปัญหาและโครงการเว็บ (ปัญหาที่ทำให้เกิดข้อผิดพลาดนี้) ไม่ได้ถูกกำหนดเป็นโครงการเริ่มต้น ฉันตั้งค่าโครงการเว็บนี้เป็นโครงการเริ่มต้นและคลิกที่เมนูไอเท็ม "ดีบั๊ก" -> "เริ่มการดีบั๊ก" และใช้งานได้ ฉันหยุดการดีบักแล้วลองอีกครั้งและตอนนี้ก็กลับมาทำงานได้ แปลก.


2

จากนั้นปัญหาก็กลับมา ฉันถอนการติดตั้งทั้งสองอย่างMicrosoft.CodeDom.Providers.DotNetCompilerPlatformและ Uninstall-package Microsoft.Net.Compilersไม่มีความช่วยเหลือ ติดตั้งแล้ว - ไม่ช่วย ทำความสะอาดโครงการและไม่สร้างความช่วยเหลือ เซิร์ฟเวอร์ที่รีสตาร์ทแล้วไม่มีความช่วยเหลือจากนั้นฉันสังเกตเห็นว่าโครงการจำเป็นต้องไม่ใช่เซิร์ฟเวอร์ล่าสุดซึ่งปัจจุบันคือ 1.0.5 แต่ 1.0.3 เนื่องจากข้อผิดพลาดไม่สามารถโหลดเวอร์ชัน 1.0.3 ได้ ดังนั้นฉันจึงติดตั้งรุ่น dll นั้นแทนและตอนนี้ก็ใช้งานได้


1

ASP.NET ไม่ค้นหาbin/debugหรือโฟลเดอร์ย่อยใด ๆ ภายใต้ bin สำหรับแอสเซมบลีที่เหมือนกับแอปพลิเคชันประเภทอื่น ๆ คุณสามารถสั่งรันไทม์เพื่อค้นหาในตำแหน่งอื่นโดยใช้การกำหนดค่าต่อไปนี้:

<configuration>
   <runtime>   
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="bin;bin\Debug;bin\Release"/>
      </assemblyBinding>
   </runtime>   
</configuration>

1

คุณควรอัพเดตแพ็คเกจ "Microsoft.CodeDom.Providers.DotNetCompilerPlatform" และ "Microsoft.Net.Compilers" ในโครงการของคุณ


1

ในกรณีของฉันฉันได้รับข้อผิดพลาดเมื่อฉันมีเว็บแอปพลิเคชันของฉันใน 4.5.2 และไลบรารีระดับอ้างอิงใน 4.6.1 เมื่อฉันอัพเดต Web Application เป็นเวอร์ชัน 4.5.2 ข้อผิดพลาดก็หายไป


มีข้อผิดพลาดเหมือนกันแน่นอนเมื่อติดตั้ง Umbraco 8 สำหรับรุ่น. net ที่ไม่ถูกต้อง (จำเป็น 4.7.2) แทน 4.5.2 (ค่าเริ่มต้น VS 2017)
Bunkerbuster

1

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


1

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

ขั้นตอน:

  1. เปิด IIS

  2. คลิกที่กลุ่มแอปพลิเคชัน

  3. เลือกกลุ่มแอปพลิเคชันที่คุณกำลังประสบปัญหา

  4. คลิกขวา -> การตั้งค่าขั้นสูง

  5. คลิกที่ไอคอนสามจุดข้างidentiy

  6. ตอนนี้เลือกบัญชีที่กำหนดเอง

  7. ตั้งชื่อผู้ใช้และรหัสผ่านสำหรับพีซีของคุณ

  8. บันทึก

รีเฟรชแอปพลิเคชันของคุณ .. และมันจะเริ่มทำงาน มีปัญหาด้านความปลอดภัยสำหรับการเข้าถึง dll


1

เพียงถอนการติดตั้งแพคเกจจากคอนโซลตัวจัดการแพคเกจจากคำสั่งด้านล่าง

PM> ถอนการติดตั้งแพ็คเกจ Microsoft.CodeDom.Providers.DotNetCompilerPlatform

PM> ถอนการติดตั้งแพ็คเกจ Microsoft.Net.Compilers

จากนั้นติดตั้งอีกครั้งจากผู้จัดการนักเก็ต ป้อนคำอธิบายรูปภาพที่นี่


1

หากคุณเพิ่งติดตั้งหรืออัปเดต Microsoft.CodeDom.Providers.DotNetCompilerPlatformแพคเกจให้ตรวจสอบอีกครั้งว่าเวอร์ชันของแพ็กเกจนั้นอ้างอิงในโปรเจ็กต์ของคุณชี้ไปยังเวอร์ชันที่ถูกต้องและเหมือนกันของแพ็กเกจนั้น:

  • ในProjectName.csprojให้แน่ใจว่า<Import>แท็กสำหรับMicrosoft.CodeDom.Providers.DotNetCompilerPlatformอยู่และชี้ไปที่เวอร์ชันที่ถูกต้อง

  • ในProjectName.csprojตรวจสอบให้แน่ใจว่ามี<Reference>แท็กสำหรับMicrosoft.CodeDom.Providers.DotNetCompilerPlatformอยู่และชี้ไปยังเวอร์ชันที่ถูกต้องทั้งในIncludeแอตทริบิวต์และลูก<HintPath>แอตทริบิวต์และเด็ก

  • ในโครงการweb.configนั้นตรวจสอบให้แน่ใจว่ามี<system.codedom>แท็กอยู่และ<compiler>แท็กลูกนั้นมีเวอร์ชันเดียวกันในtypeแอตทริบิวต์

ด้วยเหตุผลบางอย่างในกรณีของฉันการอัปเกรดแพคเกจนี้จาก 1.0.5 เป็น 1.0.8 ทำให้<Reference>แท็กในนั้น.csprojมีการIncludeชี้ไปที่เวอร์ชันเก่า 1.0 5 .0 (ซึ่งฉันลบไปหลังจากอัพเกรดแพ็คเกจ) แต่ทุกอย่างก็ชี้ไปที่เวอร์ชั่นใหม่และถูกต้อง 1.0 8 .0


1

ตรวจสอบให้แน่ใจว่าโครงการของคุณสร้างขึ้นอย่างสมบูรณ์!

คลิกที่แท็บ 'เอาท์พุท' และตรวจสอบให้แน่ใจว่าคุณไม่มีสิ่งที่ชอบ:

========== สร้างใหม่ทั้งหมด: 14 สำเร็จ, 1 ล้มเหลว, 0 ข้ามไป =========

และเปิดbinโฟลเดอร์ของคุณแล้วตรวจดูว่าเป็นรุ่นล่าสุดหรือไม่

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



1

ในกรณีของฉันโครงการเว็บของฉันไม่ได้โหลดอย่างถูกต้อง (มันแสดงให้เห็นว่าโครงการไม่พร้อมใช้งาน) จากนั้นฉันต้องโหลดโครงการเว็บของฉันหลังจากเปิดสตูดิโอภาพของฉันในโหมดผู้ดูแลระบบแล้วทุกอย่างทำงานได้ดี



0

ข้อยกเว้นที่เราพบเจอนั้นไม่ได้อยู่บนโลคัล แต่อยู่บนเซิร์ฟเวอร์ระยะไกล Azure CI กำลังอ่านจากโฟลเดอร์แพ็คเกจ แต่ไม่พบรุ่นคอมไพเลอร์ดังกล่าวข้างต้น

ในการแก้ไขปัญหานี้เราได้แก้ไขไฟล์โครงการเพื่อให้เป็นเช่นนั้น

ไม่ได้อ้างอิงแพ็คเกจใด ๆ ที่นี่โดยตรงที่อ้างอิงถึงตัวแปรสภาพแวดล้อม

วิธีนี้แก้ไขปัญหาได้อย่างไรก็ตามในกรณีของเราเราไม่ได้ใช้แพคเกจโดยตรงจาก "package.config" แทนเรามีโฟลเดอร์แยกต่างหากเพื่อรักษาความสมบูรณ์ของเวอร์ชันในทีมต่างๆ


0

ไปที่ inetmgr จากคำสั่งเริ่มต้นในคอนโซลตัวจัดการ IIS เลือกโฟลเดอร์แอปพลิเคชันภายใต้เว็บไซต์เริ่มต้นคลิกขวาที่โฟลเดอร์นั้นแล้วแปลงเป็นแอปพลิเคชันเรียกใช้ไฟล์. asx โดยการเปิดใช้งานมันแก้ไขปัญหาได้


0

ตรวจสอบว่าBINโฟลเดอร์ถูกอัพโหลดอย่างสมบูรณ์หรือหายไปในไฟล์


ฉันกำลังเผชิญกับปัญหาเดียวกันค่อนข้างใหม่สำหรับ asp.net
Prashant Pimpale

0

เกี่ยวกับข้อผิดพลาดนี้ฉันได้ลอง:

  • ทำความสะอาดและสร้างโครงการใหม่
  • การยกเลิกการโหลดและโหลดซ้ำโครงการ
  • การแก้ไข Target Framework
  • การแก้ไขพา ธ เอาต์พุต
  • การเพิ่มนักเก็ตลงใน GAC
  • การลบแพ็คเกจuninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform uninstall-package Microsoft.Net.Compilersและติดตั้งอีกครั้ง

ในขณะที่สิ่งเหล่านี้ดูเหมือนจะเป็นวิธีการแก้ปัญหาที่ถูกต้องฉันก็สามารถสร้างข้อผิดพลาดใหม่และในที่สุดข้อผิดพลาดที่ดูเหมือนว่าจะสามารถแสดงเมื่อการอ้างอิง / นักเก็ตบางอย่างหายไป

ในกรณีของฉันฉันเพิ่งติดตั้ง Microsoft Office ใหม่และได้รับการอ้างอิงแอสเซมบลีเช่น Microsoft.Office.Core ดูเหมือนว่าการติดตั้งใหม่จะไม่รวมแพ็คเกจที่จำเป็นซึ่งทำให้มันไม่สามารถสร้างโซลูชันได้อย่างถูกต้อง

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

ดูเหมือนว่าข้อความแสดงข้อผิดพลาดที่ไม่ชัดเจนจาก Visual Studio


0

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

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