คุณลักษณะ C # 6.0 ไม่ทำงานกับ Visual Studio 2015


137

ฉันกำลังทดสอบ Visual Studio 2015 กับ C # 6.0 แต่ฟีเจอร์ภาษาไม่ทำงาน ในแอปพลิเคชันเว็บ MVC โค้ดต่อไปนี้จะรวบรวม:

if (!string.IsNullOrWhiteSpace(Model.Profile?.TypeName))
{
    // More logic here...
}

อย่างไรก็ตามเมื่อฉันเรียกใช้แอปพลิเคชันผ่าน Debug และ IIS Express ฉันได้รับข้อผิดพลาดต่อไปนี้:

CS1525: เงื่อนไขของนิพจน์ไม่ถูกต้อง "."

ฉันจะเปิดใช้งานคุณสมบัติเหล่านี้ได้อย่างไร?


1
ดูเหมือนว่าเป็น MVC เฉพาะ (หรืออย่างน้อยก็เฉพาะ ASP.NET) ดังนั้นฉันจึงเพิ่มแท็ก - เพราะ Visual Studio เองก็รู้อย่างชัดเจนเกี่ยวกับ C # 6 ... คุณควรดูที่ใดก็ตามที่คุณกำหนดค่า MVC ในแง่ของเวอร์ชัน ของ. NET กำลังกำหนดเป้าหมาย ... เป็นไปได้ว่ามีบางอย่างที่จะให้คุณระบุคอมไพเลอร์ที่จะใช้
Jon Skeet

บางทีคุณอาจต้องเพิ่มcompilerองค์ประกอบสำหรับ roslyn codeprovider msdn.microsoft.com/en-us/library/y9x69bzw(v=vs.110).aspxใน web.config?
rene

รหัสนี้อยู่ในหน้า aspx หรือหน้า Razor? หรือรหัสที่อยู่ในไฟล์. cs?
Erik Funkenbusch

@ErikFunkenbusch มันอยู่ในหน้า Razor
Chris Schiffhauer

1
ใช่ MVC5 ไม่รองรับ Roslyn
Erik Funkenbusch

คำตอบ:


211

ใช้งานได้ใน MVC 5 (ทดสอบ 5.2.3) คุณเพียงแค่ต้องเพิ่มแพ็คเกจรหัส roslyn dom Nuget

ผู้ให้บริการ CodeDOM สำหรับ. NET Compiler ...

ผู้ให้บริการ CodeDOM ทดแทนที่ใช้คอมไพเลอร์. NET Compiler Platform ("Roslyn") ใหม่เป็น API บริการ สิ่งนี้ให้การสนับสนุนคุณลักษณะภาษาใหม่ในระบบที่ใช้ CodeDOM (เช่นการคอมไพล์รันไทม์ ASP.NET) รวมทั้งปรับปรุงประสิทธิภาพการคอมไพล์ของระบบเหล่านี้

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

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/


4
สิ่งนี้ควรถูกส่งเป็นคำตอบเพราะจะช่วยแก้ปัญหาได้แทนที่จะต้องอัปเกรดเป็น MVC เวอร์ชันเบต้า
Daniel Eugen

3
@ คุณคิดไม่ถูก Microsoft.Net.Compilersเกี่ยวข้องกับ MSBUILD ผู้ให้บริการ CodeDOMเกี่ยวข้องกับ ASP.NET และ API อื่น ๆ เป็นที่รวบรวมที่รันไทม์
jbtule

1
ถูกของคุณ. ฉันอ่านผิด / ตีความผิดเพราะบางครั้งพวกเขาเปลี่ยนแพ็คเกจด้วยชื่อใหม่และเพิ่มเป็นการอ้างอิง
David De Sloovere

21
การรีสตาร์ท Visual Studio อาจคุ้มค่า มันบ่นต่อไปหลังจากที่ฉันติดตั้งแพ็คเกจ แต่การรีสตาร์ททำให้มันหายไป :)
Siewers

1
@Rono nuget.orgให้ตรวจสอบแหล่งที่มาของแพคเกจของคุณ ดังที่คุณเห็นจากลิงค์เป็นชื่อที่ถูกต้องและมีแพ็คเกจอยู่
jbtule

18

ฉันมี MVC5 และเพิ่งติดตั้ง VS 2015

ฉันได้ติดตั้งแพ็คเกจผู้ให้บริการ CodeDOM แล้ว แต่ก็ไม่ได้ช่วยอะไร ... แต่หลังจากนั้นฉันก็รู้ว่าแพ็คเกจนั้นรองรับกรอบงาน 4.5 เท่านั้นในขณะที่ฉันตั้งกรอบเป้าหมายเป็น 4.6 ในระหว่างการทดสอบ - ใช้ได้กับ 4.5 แม้ว่า ...

ดังนั้นให้ความสนใจกับกรอบเป้าหมายด้วย หากคุณมี 4.5 - เพียงแค่ติดตั้งแพ็คเกจ Microsoft.CodeDom.Providers.DotNetCompilerPlatform แต่ถ้าคุณมี 4.5.1-4.6 เป็นเป้าหมายคุณจะต้องเปลี่ยนในส่วน web.config

  <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.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>
  </system.codedom>

สำหรับC #เพียงแค่เปลี่ยนประเภทเป็น:

type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 

สิ่งนี้ช่วยให้ฉันได้C# 6ทำงานด้วยอย่างแน่นอนASP.NET 4.6แต่อาจจะดีกว่าถ้าโพสต์รหัสด้วยความถูกต้องที่typeนั่น ...
Serj Sagan

ขอบคุณสิ่งนี้ได้ผลเมื่อฉันกลับบ้านในวันอังคารจากนั้นก็ไม่ได้ผลเมื่อฉันกลับมาในวันพฤหัสบดี อย่างไรก็ตามส่วนของการกำหนดค่านี้หายไปแล้วเพราะฉันจำได้ว่าเคยเห็นมันเมื่อฉันเริ่มต้นใช้งาน!
Carl

16

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

บนเมนู Visual Studio เลือกโครงการและคุณควรเห็นรายการย่อยเปิดใช้งาน C # 6 / VB 14หากคุณกำลังมีปัญหานี้ เลือกรายการย่อยของเมนูนี้ มันจะดาวน์โหลดแพ็คเกจที่ถูกต้องจาก Nuget และติดตั้ง หลังจากนี้ให้รีสตาร์ท Visual Studio และโหลดโซลูชันของคุณใหม่

ฉันไม่สามารถตรวจสอบได้ว่าสิ่งนี้จะแก้ไขการเลือกProject Properties> Build> Advanced> Language Versionเป็นC # 6หรือไม่ดังนั้นคุณอาจต้องการตรวจสอบสิ่งนี้ด้วยหลังจากเปิดใช้ C # 6 จากเมนู


2
รายการย่อยนี้ไม่อยู่ในเมนูโครงการของฉัน ฉันมี Unity 5.5.2 ที่เปิดชุมชน VS 2015 ของฉันเพื่อสร้างสคริปต์ เมื่อเพิ่มค่าเริ่มต้นให้กับคุณสมบัติข้อผิดพลาดของคอมไพเลอร์ที่แสดงโดย unline สีแดงระบุว่าฉันต้องการ c # 6 เนื่องจาก C # v.4 ถูกโหลดในขณะนี้ ทุกครั้งที่ฉันพยายามเลือกคุณสมบัติของโปรเจ็กต์หน้าจอจะกะพริบ แต่ไม่มีหน้าขึ้นมา
Edward

15

ตรวจสอบคุณสมบัติโครงการของคุณไปที่สร้างขั้นสูงและดูว่า C # 6.0 ถ้าคุณไม่มีเป็นค่าเริ่มต้น

ขณะนี้มีการรองรับ MVC5 และ C # 6.0 ที่สมบูรณ์แบบและทำงานได้ดีอย่างน่าอัศจรรย์!


18
"ฟีเจอร์" ตัวดำเนินการเผยแพร่ค่าว่าง "ไม่มีใน C # 5 โปรดใช้ภาษาเวอร์ชัน 6 ขึ้นไป" ไม่รู้เกี่ยวกับการตั้งค่าขั้นสูง แต่ดูเหมือนจะใช้ไม่ได้ที่นี่
juFo

3
คุณจะเปลี่ยนเวอร์ชันเริ่มต้นเป็น 6 ได้อย่างไรเพื่อที่ฉันจะได้ไม่ต้องตั้งค่าในแต่ละโครงการ
ร์

3
กำหนด "บาง" สิ่งนี้ใช้ไม่ได้กับการอัปเดต 2015 3
Robert Ivanc

1
เมื่อฉันไปที่คุณสมบัติโครงการฉันไม่ได้รับเมนูสร้าง ถ้าฉันไปที่ "หน้าคุณสมบัติ" ฉันจะได้รับเมนูบิลด์ แต่ฉันไม่มีปุ่ม "ขั้นสูง" บนหน้าจอบิลด์ คำแปล "สิ่งนี้ใช้ไม่ได้" (สำหรับฉัน)
Malcolm Anderson

เวอร์ชัน VS ของฉันคือ Community 2015 Update 3 (14.0.25431.01)
Malcolm Anderson

10

รวมถึงทำตามคำแนะนำในการติดตั้งล่าสุดMicrosoft.CodeDom.Providers.DotNetCompilerPlatformฉันยังต้องตั้งค่ารูท Web.config system.codedomเป็นสิ่งนี้เพื่อให้ข้อผิดพลาดทั้งหมดVisual Studio 2015หายไปในที่สุด:

  <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>
  </system.codedom>

ตอนนี้รีสตาร์ทVisual Studioและควรทำ


6

Visual Studio 2015 จะแสดงEnable C#6 / VB 14ในเมนูโครงการด้วยเว็บไซต์ ASP.NET / เว็บแอปพลิเคชันที่เลือก

สิ่งนี้จะติดตั้งMicrosoft.CodeDom.Providers.DotNetCompilerPlatformและMicrosoft.Net.Compilersแพ็กเกจลงในโปรเจ็กต์ของคุณโดยพฤตินัยและเพิ่มแท็กที่เหมาะสมลงในไฟล์ web.config

Visual Studio 2015 - เปิดใช้งานข้อมูลโค้ด cs6


1
แท็บเว็บไซต์อะไร หากคุณหมายถึงคุณสมบัติ / เว็บไม่มีคุณสมบัติดังกล่าวที่นั่น
Robert Ivanc

1
I Visual Studio เมื่อคุณเลือกโครงการ WebSite แท็บเว็บไซต์จะปรากฏถัดจากแท็บมุมมอง คุณอาจพบคุณสมบัตินี้
Michal Šuvada

1
ตอนนี้ฉันได้ลดลงแล้วโปรดแก้ไขเพื่อชี้แจงว่าคุณหมายถึงอะไรเช่นการเพิ่มภาพหน้าจอ
user247702

ฉันกำลังพยายามแก้ไขปัญหาเกี่ยวกับเว็บไซต์และรายการเมนูนั้นไม่สามารถใช้ได้สำหรับฉัน โปรดทราบว่าโครงการอื่น ๆ ที่ไม่ใช่เว็บในโซลูชันเดียวกันไม่มีปัญหาในการใช้คุณสมบัติ VB 14 พวกเขาทั้งหมดกำหนดเป้าหมาย. NET 4.7 และฉันติดตั้งคอมไพเลอร์ CodeDom
Andrew S

-1
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:7 /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.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:15 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.