คุณลักษณะ 'การใช้การประกาศ' ไม่พร้อมใช้งานใน C # 7.3 โปรดใช้ภาษาเวอร์ชัน 8.0 หรือสูงกว่า - มีข้อผิดพลาดในเครื่องหนึ่ง แต่ใช้งานได้กับเครื่องอื่น


24

เมื่อใช้Visual Studio Enterprise 16.3.7กับเครื่องที่แยกกันสองเครื่องเครื่องหนึ่งจะสร้างงานได้ดีและอีกเครื่องหนึ่งจะพ่นข้อผิดพลาด:

คุณลักษณะ 'การใช้การประกาศ' ไม่พร้อมใช้งานใน C # 7.3 โปรดใช้ภาษาเวอร์ชัน 8.0 หรือสูงกว่า

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

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

นี้สามารถแก้ไขได้อย่างง่ายดายบนเครื่องทำงานไม่มีโดยการตั้งค่าLangVersionใน.csprojขณะที่แนะนำที่นี่https://stackoverflow.com/a/48085575/3850405หรือให้ Visual Studio โดยอัตโนมัติแก้ไขมันเหมือนหน้าจอพิมพ์ดังกล่าวข้างต้น

<LangVersion>8.0</LangVersion>

สิ่งที่ฉันไม่เข้าใจคือสาเหตุที่เครื่องหนึ่งสร้างได้ดีหากไม่มีบรรทัดนี้.csprojและเครื่องอื่นต้องการมัน


หากคุณได้รับข้อผิดพลาดดังกล่าวหมายความว่าไม่ใช่โครงการ C # 8 หรือคุณใช้รุ่น Resharper พร้อมข้อบกพร่องในการวิเคราะห์
Panagiotis Kanavos

TargetFramework และ LangVersion ใน csproj ของคุณคืออะไร?
Panagiotis Kanavos

@PanagiotisKanavos ใช่ แต่โครงการสร้างบนเครื่องหนึ่งและไม่ได้อยู่ที่อื่น - นั่นคือสิ่งที่ฉันไม่เข้าใจ ไม่ใช้ ReSharper
Ogglas

นี่อาจหมายความว่า 3.0 SDK หายไปในเครื่องเดียว สิ่งที่ไม่dotnet --list-sdksแสดง?
Panagiotis Kanavos

@PanagiotisKanavos Target framework .NET Framework 4.6.1และLangVersionไม่ได้ตั้งค่าไว้
Ogglas

คำตอบ:


20

ฉันได้รับข้อผิดพลาดเดียวกัน แต่ฉันลืมที่จะรวม

<LangVersion>8.0</LangVersion>

แอตทริบิวต์ในทุกไฟล์ .csproj ในการแก้ปัญหา ต่อไปนี้คือการตั้งค่า c # 8 ปัจจุบันของฉัน:

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <LangVersion>8.0</LangVersion>
    <Nullable>enable</Nullable>
    <NullableContextOptions>enable</NullableContextOptions>
  </PropertyGroup>

ฉันพบว่าเอกสารต่อไปนี้มีประโยชน์มากที่สุดเมื่อย้ายจาก core 2.2 ไปยัง 3.x

MSDN 2.2 -> 3.0

MSDN 3.0 -> 3.1


2
คุณสามารถใช้<LangVersion>latest</LangVersion>แทน<LangVersion>8.0</LangVersion>
Eliahu Aaron

ฉันคิดว่าลิงค์แรกMSDN 2.2 -> 3.0มีไว้เพื่อลิงค์ไปยังสิ่งต่อไปนี้: docs.microsoft.com/en-us/aspnet/core/migration/22-to-30 ฉันพยายามแก้ไขคำตอบเพื่อแก้ไข แต่ "แนะนำคิวการแก้ไข เต็ม "ดังนั้นจะโพสต์ที่นี่แทน
ahillier88


10

อาจเป็นเพราะคอมไพเลอร์ใช้โดยค่าเริ่มต้นเวอร์ชันภาษา C # ที่แตกต่างกันสำหรับกรอบงานเป้าหมายที่แตกต่างกัน

หากต้องการแทนที่ภาษา C # เริ่มต้นให้เพิ่มลงในไฟล์โครงการ (ตามที่แนะนำในคำถาม):

<PropertyGroup>
   <LangVersion>8.0</LangVersion>
</PropertyGroup>

หรือ:

<PropertyGroup>
   <LangVersion>latest</LangVersion>
</PropertyGroup>

ดูเวอร์ชัน C # ภาษาสำหรับเวอร์ชันภาษา C #เริ่มต้นสำหรับเฟรมเวิร์กเป้าหมายที่แตกต่างกันและวิธีเลือกเวอร์ชันภาษา C # ด้วยตนเอง

ดูเพิ่มเติมที่คำตอบล้นสแต็คC # 8 รองรับ. NET Framework หรือไม่ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้


นี่คือส่วนหนึ่งของบทความการกำหนดเวอร์ชันภาษา C # :

การกำหนดเวอร์ชันภาษา C #

คอมไพเลอร์ C # ล่าสุดกำหนดเวอร์ชันภาษาเริ่มต้นตามกรอบงานเป้าหมายหรือกรอบงานของโครงการของคุณ นี่เป็นเพราะภาษา C # อาจมีคุณสมบัติที่ขึ้นอยู่กับชนิดหรือส่วนประกอบรันไทม์ที่ไม่พร้อมใช้งานในทุกการใช้งาน. NET สิ่งนี้ยังช่วยให้มั่นใจได้ว่าสิ่งที่โครงการของคุณสร้างขึ้นจะถูกกำหนดเป็นค่าเริ่มต้น

กฎในบทความนี้ใช้กับคอมไพเลอร์ที่จัดส่งกับ Visual Studio 2019 หรือ. NET Core 3.0 SDK คอมไพเลอร์ C # ที่เป็นส่วนหนึ่งของการติดตั้ง Visual Studio 2017 หรือ. NET Core SDK เวอร์ชันก่อนหน้ามีเป้าหมายเป็น C # 7.0 โดยค่าเริ่มต้น

ค่าเริ่มต้น

คอมไพเลอร์กำหนดค่าเริ่มต้นตามกฎเหล่านี้:

--------------------------------------------------------
Target framework | version | C# language version default
--------------------------------------------------------
.NET Core        | 3.x     | C# 8.0
.NET Core        | 2.x     | C# 7.3
.NET Standard    | 2.1     | C# 8.0
.NET Standard    | 2.0     | C# 7.3
.NET Standard    | 1.x     | C# 7.3
.NET Framework   | all     | C# 7.3
--------------------------------------------------------

แทนที่ค่าเริ่มต้น

หากคุณต้องระบุเวอร์ชัน C # ของคุณอย่างชัดเจนคุณสามารถทำได้หลายวิธี:

  • แก้ไขไฟล์โครงการด้วยตนเอง
  • ตั้งค่ารุ่นภาษาสำหรับหลายโครงการในไดเรกทอรีย่อย
  • กำหนดค่าตัวเลือกคอมไพเลอร์ -langversion

แก้ไขไฟล์โครงการ

คุณสามารถตั้งค่าเวอร์ชันภาษาในไฟล์โครงการของคุณ ตัวอย่างเช่นหากคุณต้องการเข้าถึงคุณลักษณะการแสดงตัวอย่างอย่างชัดเจนให้เพิ่มองค์ประกอบดังนี้:

<PropertyGroup>
   <LangVersion>preview</LangVersion>
</PropertyGroup>

ค่าpreviewใช้เวอร์ชันตัวอย่างภาษา C # เป็นภาษาล่าสุดที่คอมไพเลอร์ของคุณรองรับ

กำหนดค่าหลายโครงการ

ในการกำหนดค่าหลายโครงการคุณสามารถสร้างไฟล์Directory.Build.propsที่มี<LangVersion>องค์ประกอบ โดยทั่วไปคุณทำเช่นนั้นในไดเรกทอรีโซลูชันของคุณ เพิ่มสิ่งต่อไปนี้ในไฟล์Directory.Build.propsในไดเรกทอรีโซลูชันของคุณ:

<Project>
 <PropertyGroup>
   <LangVersion>preview</LangVersion>
 </PropertyGroup>
</Project>

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


8

ฉันดาวน์โหลด. Net Core 3.0 และ 3.1 รุ่นล่าสุดและมีปัญหาเดียวกัน สำหรับฉันแล้วการแก้ไขดูเหมือนจะดาวน์โหลดอัปเดตล่าสุดสำหรับ Visual Studio 2019 (ไปเป็นเวอร์ชัน 16.4.2)

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


นั่นไม่ใช่หมายเลขเวอร์ชัน VS2019 ดูเหมือนว่า 16.xy ใช้วิธีใช้> เกี่ยวกับ
ฮันส์ Passant

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