'Beyanları kullanma' özelliği C # 7.3'te mevcut değildir. Lütfen dil sürümü 8.0 veya üstünü kullanın - Bir makinede hata var ancak başka bir bilgisayarda çalışıyor


24

Kullanıldığında Visual Studio Enterprise 16.3.7, iki ayrı makinelerde tek bir ince oluşturur ve diğer makine hata atar:

'Beyanları kullanma' özelliği C # 7.3'te mevcut değildir. Lütfen dil sürümü 8.0 veya üstünü kullanın.

resim açıklamasını buraya girin

resim açıklamasını buraya girin

Bu kolayca ayarlayarak hiçbiri çalışma makinede çözülebilir LangVersioniçinde .csprojburada önerildiği gibi https://stackoverflow.com/a/48085575/3850405 veya Visual Studio otomatik yukarıdaki baskı ekranı gibi da düzelteyim.

<LangVersion>8.0</LangVersion>

Anlayamadığım şey, bir makine neden bu hat olmadan iyi çalışıyor .csprojve diğer makine buna ihtiyaç duyuyor?


Böyle bir hata alırsanız, bunun bir C # 8 projesi olmadığı veya bir analiz hatasıyla Resharper sürümünü kullandığınız anlamına gelir
Panagiotis Kanavos

Csproj'unuzdaki TargetFramework ve LangVersion nedir?
Panagiotis Kanavos

@PanagiotisKanavos Evet ama proje bir makineye dayanıyor, diğerine değil - anlamadığım şey bu. ReSharper kullanılmaz.
Ogglas

Bu, 3.0 SDK'nın bir makinede eksik olduğu anlamına gelebilir. Ne dotnet --list-sdksgösteriyor?
Panagiotis Kanavos

@PanagiotisKanavos Hedef çerçevesi .NET Framework 4.6.1ve LangVersionayarlanmadı.
Ogglas

Yanıtlar:


20

Aynı hatayı aldım, ancak eklemeyi unuttum

<LangVersion>8.0</LangVersion>

öznitelik içinde TÜM .csproj dosyaları özniteliği . Şu anki c # 8 kurulumum:

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

Temel 2.2'den 3.x'e geçerken aşağıdaki belgelerin en yararlı olduğunu gördüm:

MSDN 2.2 -> 3.0

MSDN 3.0 -> 3.1


2
Bunun <LangVersion>latest</LangVersion>yerine kullanabilirsiniz<LangVersion>8.0</LangVersion>
Eliahu Aaron

İlk bağlantının MSDN 2.2 -> 3.0aşağıdaki bağlantıya bağlanması gerektiğini düşünüyorum : docs.microsoft.com/en-us/aspnet/core/migration/22-to-30 Cevabı düzeltmek için düzenlemeyi denedim ancak "önerilen düzenleme kuyruğu dolu "ise, bunun yerine buraya gönderilir.
ahillier88


10

Bunun nedeni, derleyicinin farklı Hedef Çerçeveler için varsayılan olarak farklı C # dili sürümleri kullanması olabilir.

Varsayılan C # dilini geçersiz kılmak için proje dosyasına ekleyin (soruda önerildiği gibi):

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

veya:

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

Bkz sürüm C # dili farklı hedef çerçeveler ve nasıl el C # dil sürümünü seçmek için varsayılan C # dil sürümleri için.

Ayrıca bkz. Yığın taşması yanıtı C # 8 .NET Framework'ü destekliyor mu? bu konu hakkında daha fazla bilgi için.


İşte C # dil versiyonlama makalesinin bir parçası:

C # dil sürümlendirme

En son C # derleyicisi, projenizin hedef çerçevesine veya çerçevelerine göre varsayılan bir dil sürümünü belirler. Bunun nedeni, C # dilinin, her .NET uygulamasında bulunmayan türlere veya çalışma zamanı bileşenlerine dayanan özelliklere sahip olabilmesidir. Bu aynı zamanda projenizin hangi hedefe karşı inşa edildiğine bağlı olarak, varsayılan olarak en yüksek uyumlu dil sürümünü edinmenizi sağlar.

Bu makaledeki kurallar, Visual Studio 2019 veya .NET Core 3.0 SDK ile birlikte gelen derleyici için geçerlidir. Visual Studio 2017 yüklemesinin veya daha önceki .NET Core SDK sürümlerinin bir parçası olan C # derleyicileri varsayılan olarak C # 7.0'ı hedefler.

Varsayılan

Derleyici varsayılan olarak şu kurallara göre belirler:

--------------------------------------------------------
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
--------------------------------------------------------

Varsayılanı geçersiz kıl

C # sürümünüzü açıkça belirtmeniz gerekiyorsa, bunu çeşitli şekillerde yapabilirsiniz:

  • Proje dosyanızı elle düzenleyin.
  • Bir alt dizindeki birden çok proje için dil sürümünü ayarlayın.
  • -Langversion derleyici seçeneğini yapılandırın.

Proje dosyasını düzenleyin

Dil sürümünü proje dosyanızda ayarlayabilirsiniz. Örneğin, önizleme özelliklerine açıkça erişmek istiyorsanız, bunun gibi bir öğe ekleyin:

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

Değer preview, derleyicinizin desteklediği en son önizleme C # dil sürümünü kullanır.

Birden çok projeyi yapılandırma

Birden çok proje yapılandırmak için , öğeyi içeren bir Directory.Build.props dosyası oluşturabilirsiniz <LangVersion>. Bunu genellikle çözüm dizininizde yaparsınız. Çözüm dizininizdeki bir Directory.Build.props dosyasına ekleyin:

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

Şimdi, bu dosyayı içeren dizinin her alt dizinindeki derlemeler önizleme C # sürümünü kullanacaktır. Daha fazla bilgi için Derlemenizi özelleştirin başlıklı makaleye bakın .


8

.Net Core 3.0 ve 3.1'in en son sürümünü indirdim ve aynı sorunu yaşadım. Benim için düzeltme, Visual Studio 2019 için en son güncelleştirmeyi (16.4.2 sürümüne) indiriyor gibiydi.

Bu da bilgisayarımı yeniden başlattı ve hata gitti.


Bu bir VS2019 sürüm numarası değil, 16.xy'ye benziyorlar. Yardım> Hakkında'yı kullanın.
Hans Passant

4.7.03056 bir .NET Framework sürümüdür, son VS sürümü şu anda 16.4.4
Alex
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.