ได้รับข้อผิดพลาดนั้นเมื่อเรียกใช้แอปพลิเคชัน ASP.NET MVC ใหม่ (ตรงจาก VS 2015 Community) บนเครื่องเซิร์ฟเวอร์ Windows 2008
ได้รับข้อผิดพลาดนั้นเมื่อเรียกใช้แอปพลิเคชัน ASP.NET MVC ใหม่ (ตรงจาก VS 2015 Community) บนเครื่องเซิร์ฟเวอร์ Windows 2008
คำตอบ:
มีคนวิ่งเข้ามามากมายฉันจึงอยากโพสต์ที่นี่
พบบ้าขอบคุณวิธีแก้ปัญหาที่ง่ายต่อการที่ผู้ชายคนนี้: Expertdebugger
เพียงแค่ปรับลดรุ่นภาษาของคุณจาก C # 6 เป็น C # 5 ดังนี้:
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701">
<providerOption name="CompilerVersion" value="v4.0"/>
</compiler>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+">
<providerOption name="CompilerVersion" value="v4.0"/>
</compiler>
</compilers>
</system.codedom>
เปลี่ยนlangversion:6
ไปทางด้านล่างจาก 6 เป็น 5 -langversion:5
แก้ไขให้ฉัน ขอบคุณเขา.
หากคุณต้องการใช้ C # 6.0:
.config
ไฟล์ของคุณเพื่อทำการแก้ไขต่อไปนี้มองหาsystem.codedom
และแก้ไขเพื่อให้มีลักษณะดังที่แสดงด้านล่าง:
<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=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
ฉันพบว่าสาเหตุโดยตรงของข้อผิดพลาดในกรณีของฉันคือ:
สิ่งนี้สมเหตุสมผลเนื่องจากข้อผิดพลาดระบุว่ามีตัวเลือกที่ไม่ถูกต้องสำหรับภาษา
แต่ก่อนหน้านี้ใช้งานได้ดี - ดังนั้นจึงต้องเลือก มีอะไรเปลี่ยนแปลง? ปรากฎว่าสมาชิกคนหนึ่งในทีมของฉันอัปเกรดเป็นเทียบกับ 2017 ในขณะที่ฉันยังใช้ปี 2015 อยู่หลังจากที่เขาทำการเปลี่ยนแปลงในโปรเจ็กต์เวอร์ชันของภาษาก็เปลี่ยนไปและฉันได้รับการเปลี่ยนแปลงนั้นในการควบคุมแหล่งที่มา แต่เวอร์ชันที่เลือกไม่สามารถใช้ได้กับเวอร์ชัน VS ของฉันดังนั้นจึงว่างเปล่า - ด้วยเหตุนี้ข้อผิดพลาด หลังจากเลือกค่าในภาษาแบบเลื่อนลง (ฉันเลือกค่าเริ่มต้น) ข้อผิดพลาดใหม่ก็ปรากฏขึ้น ข้อผิดพลาดใหม่ทำให้การสร้างล้มเหลวในบรรทัดของโค้ดใด ๆ ที่ใช้ c # เวอร์ชันใหม่กว่า ฉันเปลี่ยนรหัสเพื่อทำหน้าที่เดียวกัน แต่ด้วยไวยากรณ์เวอร์ชัน c # ของฉันและแก้ไขปัญหาได้
ดังนั้นในขณะที่สาเหตุโดยตรงของข้อผิดพลาดคือการเลือกเวอร์ชันภาษาที่ไม่ถูกต้องสาเหตุหลักเกิดจากเวอร์ชัน VS / c # ที่แตกต่างกันที่ขัดแย้งกัน
ในกรณีของฉันข้อผิดพลาดคือ:
ข้อผิดพลาด CS1617 ไม่ถูกต้องตัวเลือก 'ล่าสุด' สำหรับ / langversion; ต้องเป็น ISO-1, ISO-2, ค่าเริ่มต้นหรือจำนวนเต็มในช่วง 1 ถึง 6
ฉันเปิดไฟล์. csproj ด้วย notepad และฉันเห็นบรรทัดนี้:
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
ฉันเปลี่ยนค่าล่าสุดสำหรับจำนวนเต็มในช่วง 1 ถึง 6
<LangVersion>6</LangVersion>
ข้อผิดพลาดหายไป!
ในกรณีของฉันฉันใช้ MSBuild.exe ผิดอันที่พบใน:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319
ในการแก้ไขข้อผิดพลาดฉันอัปเดตตัวแปรสภาพแวดล้อม PATH ของฉันเพื่อเริ่มใช้ Visual Studio 2017 MSBuild.exe:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSbuild.exe
โปรดดูรายละเอียดที่ลิงค์นี้: ข้อผิดพลาด CS1056: อักขระที่ไม่คาดคิด '$' ที่เรียกใช้ msbuild ในกระบวนการรวม tfs ต่อเนื่อง
ในกรณีของฉัน (โครงการสร้างในระบบอื่น):
ฉันสามารถดำเนินโครงการนี้ได้
แทนที่จะเปลี่ยนเวอร์ชันภาษาจาก 6 เป็น 5 ให้เปลี่ยนแอตทริบิวต์ "type" บนแท็กคอมไพเลอร์จาก
Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
ถึง
Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
อัปเกรดแพ็คเกจ Microsoft.Net.Compilers Nuget เป็นเวอร์ชันล่าสุด (อย่างน้อย 2.x)
ทางออกที่ง่ายที่สุดสำหรับฉันคือการอัพเกรด. Net Compiler ผ่าน Package Manager
ติดตั้งแพ็คเกจ Microsoft.Net.Compilers
จากนั้นเปลี่ยนบรรทัด Web.Config เป็น
<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=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
ปรากฎว่านี่เป็นปัญหาเนื่องจากโครงการ ASP.NET MVC 4 อ้างถึงเวอร์ชันเฉพาะของแพ็คเกจ Microsoft.Net.Compilers Visual Studio ใช้คอมไพเลอร์จากแพ็คเกจเฉพาะนี้ไม่ใช่คอมไพเลอร์ที่ติดตั้งไว้ในคอมพิวเตอร์
คำเตือนหรือสิ่งที่ดีจาก VS2019 :-)
วิธีแก้ไขคือการอัปเดตแพคเกจ Microsoft.Net.Compilers เป็นเวอร์ชันที่ใหม่กว่า
เวอร์ชัน 1.x สำหรับ C # 6 เวอร์ชัน 2.x สำหรับ C # 7 เวอร์ชัน 3.x สำหรับ C # 8 วิธีแก้ปัญหานี้ยังไม่ชัดเจนในทันที Visual Studio อาจแนะนำหรือบอกใบ้ว่าโดยฉันเลือกเวอร์ชันใหม่ในการตั้งค่าโปรเจ็กต์ที่การตั้งค่าตอนนี้ขัดแย้งกับแพ็คเกจที่ติดตั้งในโปรเจ็กต์
(ฉันลงเอยด้วยการเปิดการบันทึก MSBuild ระดับการวินิจฉัยเพื่อค้นหาว่า CSC.EXE IDE ใดพยายามใช้จริงๆ)
ฉันได้อัปเดต Microsoft.Net.Compilers เป็นเวอร์ชัน 2.0 หรือสูงกว่าแล้ว
ฉันแค่เปลี่ยนlangversion
ไปdefault
และมันได้ผลสำหรับฉัน VS 2015
<system.codedom>
<compilers>
<compiler language=”c#;cs;csharp” extension=”.cs” type=”Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089″ warningLevel=”4″ compilerOptions=”/langversion:default /nowarn:1659;1699;1701″>
<providerOption name=”CompilerVersion” value=”v4.0″/>
</compiler>
<compiler language=”vb;vbs;visualbasic;vbscript” extension=”.vb” type=”Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089″ warningLevel=”4″ compilerOptions=”/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+”>
<providerOption name=”CompilerVersion” value=”v4.0″/>
</compiler>
</compilers>
Clean Solution และสร้างอีกครั้งในกรณีของฉันสิ่งที่การตั้งค่าก่อนหน้านี้ถูกบล็อกเนื่องจากไม่ตรงกัน ฉันนำเข้าโครงการใหม่และสร้างขึ้นลองเปลี่ยนเวอร์ชันและทั้งหมด ทำความสะอาดโซลูชันและสร้างได้ผลสำหรับฉัน
ในกรณีของฉันฉันกำลังดาวน์โหลดไลบรารีที่มีตัวอย่างรหัสการใช้งาน keycloak โดย mattorg จาก GITHUB: https://github.com/mattmorg55/Owin.Security.Keycloak/tree/dev/samples
วิธีแก้ปัญหานั้นค่อนข้างง่ายเนื่องจากฉันใช้. Net Framework 4.6.1 แต่โครงการขอร้องให้ฉันใช้ 4.6.2 ในตอนแรก แม้ว่าฉันจะดาวน์โหลดมัน แต่มันก็ถูกเลือกเป็นครั้งแรกเมื่อรีสตาร์ทอินสแตนซ์ของ Visual Studion ทั้งหมด (หรือดีกว่าปิดอินสแตนซ์ทั้งหมด) โครงการได้รับการจัดการเป็น 4.6.1 (แม้ว่าฉันไม่ต้องการและเลือกเช่นนั้น)
ดังนั้นหลังจากที่ฉันเลือกการกำหนดค่าอีกครั้งเพื่อเลือก. Net Framework 4.6.1 ข้อผิดพลาดก็หายไปทันที
ในกรณีของฉันข้อความแสดงข้อผิดพลาดคือ:
ASPNETCOMPILER: ข้อผิดพลาด CS1617: ตัวเลือกไม่ถูกต้อง '7.3' สำหรับ / langversion; ต้องเป็น ISO-1, ISO-2, ค่าเริ่มต้นหรือจำนวนเต็มในช่วง 1 ถึง 6
ตามที่ระบุไว้ในปัญหา GitHub นี้และชุมชนนักพัฒนา VS นี้ดูเหมือนว่าจะเป็นข้อบกพร่องในแพ็คเกจMicrosoft.CodeDom.Providers.DotNetCompilerPlatform NuGet รุ่นเก่า
หลังจากอัปเกรดแพ็คเกจ NuGet เป็น 3.6.0 แล้วข้อผิดพลาดยังคงอยู่ในเว็บแอปพลิเคชันของฉัน
ฉันพบว่าฉันต้องลบโฟลเดอร์ "bin \ Roslyn" เก่าในเว็บแอปพลิเคชันของฉันเพื่อให้สามารถใช้งานได้
ดูเหมือนว่าแพ็คเกจ Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet ที่ใหม่กว่า (3.6.0 ในกรณีของฉัน) ไม่ได้นำโฟลเดอร์ "Rosyln" ของตัวเองมาใช้อีกต่อไปและถ้ามีโฟลเดอร์ "Roslyn" เก่านั้นจะมีความสำคัญเหนือกว่าในระหว่างการคอมไพล์
สิ่งนี้เกิดขึ้นกับฉันเมื่อฉันดึง repo ของฉันลงหลังจากย้ายไปยังที่ตั้งใหม่ วิธีแก้ปัญหาคือการยกเลิกการโหลดแล้วโหลดใหม่แต่ละโปรเจ็กต์ที่แสดงข้อผิดพลาดนี้
ฉันลองใช้ตัวเลือกอื่น ๆ แต่ไม่มีอะไรได้ผลสำหรับฉัน นอกจากนี้ในสถานการณ์นี้ไฟล์กำหนดค่าของฉันถูกตั้งค่าให้ใช้ภาษาเวอร์ชัน 6 ดังนั้นการตั้งค่าเป็นค่าเริ่มต้นจึงไม่สามารถแก้ไขปัญหาได้
หากตัวเลือกข้างต้นทั้งหมดไม่ทำงานและคุณใช้แพ็คเกจ nuget เช่น Microsoft.Net.Compilers และ CodeDom แล้วยังไม่ทำงานแสดงว่ามีปัญหากับไฟล์โครงการที่เปิดไฟล์โครงการของคุณ ไฟล์โครงการใช้หนึ่งในตัวเลือกคอมไพเลอร์ซึ่งไม่รองรับภาษาที่คุณเลือก เปิดไฟล์โครงการด้วย notepad ++ และลบบรรทัดต่อไปนี้
ไฟล์โครงการ Orignal
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />
<!--Don't delete below one-->
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
ลบบรรทัดต่อไปนี้
<Import Project="..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.Toolset.3.7.0\build\Microsoft.Net.Compilers.Toolset.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.3.7.0\build\Microsoft.Net.Compilers.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />