Windows 2008 Server makinesinde yeni bir ASP.NET MVC uygulaması (doğrudan VS 2015 Community'den) çalıştırırken bu hatayı almaya devam etti.
Windows 2008 Server makinesinde yeni bir ASP.NET MVC uygulaması (doğrudan VS 2015 Community'den) çalıştırırken bu hatayı almaya devam etti.
Yanıtlar:
Pek çok insan bununla karşılaşıyor, bu yüzden buraya yazmak istedim.
Bu adam sayesinde çılgın ve kolay bir çözüm buldum : Expertdebugger .
Dil sürümünüzü C # 6'dan C # 5'e düşürmeniz yeterlidir, örneğin:
<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>
Aşağıya langversion:6
doğru 6'dan 5'e değiştirin -langversion:5
Benim için düzelt. Ona teşekkür et.
C # 6.0 kullanmak istiyorsanız:
.config
, aşağıdaki değişiklikleri yapmak için dosyanızı kontrol edin .Arayın system.codedom
ve aşağıda gösterildiği gibi görünecek şekilde değiştirin:
<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>
Benim durumumdaki hatanın doğrudan sebebinin şuydu:
Bu mantıklıdır çünkü hata dil için geçersiz bir seçenek olduğunu belirtir.
ama bu daha önce iyi çalışıyordu - bu yüzden seçilmiş olmalı. Ne değişti? 2015'i kullanırken takımımdan bir üyenin 2017'ye yükseltildiği ortaya çıktı. Projede değişiklik yaptıktan sonra dil sürümü değiştirildi ve bu değişikliği kaynak kontrolü üzerinden aldım. ancak seçilen sürüm benim vs sürümümde mevcut değildi, bu yüzden boştu - dolayısıyla hata. Dil açılır menüsünde bir değer seçtikten sonra (varsayılanı seçtim), yeni bir hata ortaya çıktı. yeni hata, c # 'nin daha yeni sürümünü kullanan herhangi bir kod satırında derleme hatasına neden oluyordu. aynı işlevleri yerine getirmek için kodu değiştirdim, ancak c # sürüm sözdizimim ve sorun çözüldü.
bu nedenle, hatanın doğrudan nedeni gerçekten de geçersiz bir Dil Sürümü seçimi iken, temel neden farklı vs / c # sürümlerinin çakışmasından kaynaklanıyordu.
Benim durumumda hata şuydu:
Hata CS1617 / langversion için geçersiz 'en son' seçeneği; ISO-1, ISO-2, Varsayılan veya 1 ila 6 aralığında bir tam sayı olmalıdır.
.Csproj dosyamı not defteri ile açtım ve şu satırı gördüm:
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
1 ile 6 arasındaki bir tam sayı için en sonuncuyu değiştirdim
<LangVersion>6</LangVersion>
Hata ortadan kalktı!
Benim durumumda, yanlış MSBuild.exe'yi kullanıyordum:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319
Hatayı çözmek için, PATH ortam değişkenimi Visual Studio 2017 MSBuild.exe'yi kullanmaya başlayacak şekilde güncelleştirdim:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSbuild.exe
Ayrıntılar için lütfen bu bağlantıya bakın: Hata CS1056: msbuild'i tfs sürekli entegrasyon sürecinde çalıştıran beklenmeyen '$' karakteri
benim durumumda (proje başka bir sistemde yaratılır):
Bu projeyi yürütebilirim.
Dil sürümünü 6'dan 5'e değiştirmek yerine, derleyici etiketindeki "type" özniteliğini
Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-e
Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Benim için en kolay çözüm .Net Derleyicileri Paket Yöneticisi aracılığıyla yükseltmekti
Yükleme Paketi Microsoft.Net.Compilers
ve sonra Web.Config satırlarını buna değiştirmek
<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 projesi Microsoft.Net.Compilers paketinin belirli bir sürümüne başvurduğu için bunun bir sorun olduğu ortaya çıktı. Visual Studio, bilgisayarda başka şekilde yüklenmiş olan derleyiciyi değil, bu belirli paketteki derleyiciyi kullanıyordu.
VS2019'dan bir uyarı veya başka bir şey güzel olurdu :-)
Çözüm daha sonra Microsoft.Net.Compilers paketini daha yeni bir sürüme güncellemektir.
Sürüm 1.x, C # 6 içindir Sürüm 2.x, C # 7 içindir Sürüm 3.x, C # 8 içindir. Bunu nasıl çözeceğim hemen belli değildi. Visual Studio, proje ayarlarında yeni bir sürümü seçtiğimde, ayarın artık projeye yüklenen paketle çakıştığını önerebilir veya ima edebilirdi.
(IDE'nin gerçekten hangi CSC.EXE'yi kullanmaya çalıştığını bulmak için Tanılama düzeyi MSBuild günlüğünü açtım)
Sadece değişti langversion
etmek default
ve bu benim için çalıştı. 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>
Temiz Çözüm ve Yeniden Oluşturun Benim durumumda, önceki ayarlar uyumsuzluk nedeniyle engelliyordu. Yeni bir proje aldım ve inşa ettim, versiyonları değiştirmeyi denedim. çözümleri temizleyin ve benim için işe yaradı.
Benim durumumda, GITHUB'dan mattorg tarafından keycloak uygulamasının örnek kodunu içeren bir kitaplık indiriyordum: https://github.com/mattmorg55/Owin.Security.Keycloak/tree/dev/samples
Net Framework 4.6.1'i kullandığım için çözüm oldukça kolaydı, ancak proje başlangıçta 4.6.2'yi kullanmam için bana yalvardı. İndirmiş olmama rağmen, Visual Studion'un tüm örneklerini yeniden başlatırken (veya daha iyisi tüm örnekleri kapatırken) ilk olarak aktif olarak seçildi. Proje 4.6.1'e manipüle edildi (istememe ve seçmeme rağmen).
Net Framework 4.6.1'i seçmek için yapılandırmayı tekrar seçtikten sonra hata hemen kayboldu.
Benim durumumda hata mesajı şuydu:
ASPNETCOMPILER: CS1617 hatası: / langversion için geçersiz seçenek '7.3'; ISO-1, ISO-2, Varsayılan veya 1 ila 6 aralığında bir tam sayı olmalıdır.
Bu GitHub sayısında belirtildiği gibi ve bu VS Developer Community gönderisi , eski bir Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet paketinde bir hata gibi görünüyor .
Bu NuGet paketini 3.6.0'a yükselttikten sonra hata web uygulamamda hala devam ediyor.
Bunun çalışması için Web Uygulamamdaki eski bir "bin \ Roslyn" klasörünü silmem gerektiğini öğrendim.
Görünüşe göre daha yeni Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet paketi (benim durumumda 3.6.0) artık kendi "Rosyln" klasörünü getirmiyor ve varsa, eski "Roslyn" klasörü derleme sırasında önceliğe sahip.
Bu, depomu yeni bir yere taşıdıktan sonra aşağı çektiğimde başıma geldi. Çözüm, bu hatayı gösteren her projeyi kaldırıp yeniden yüklemekti.
Birkaç başka seçeneği denedim ama hiçbir şey benim için işe yaramadı. Ayrıca bu durumda yapılandırma dosyalarım dil sürümü 6'yı kullanacak şekilde ayarlandı, bu nedenle bunları varsayılana ayarlamak sorunu çözmedi.
Her şeyden önce tüm seçenekler çalışmıyorsa ve Microsoft.Net.Compilers ve CodeDom gibi nuget paketleri kullandıysanız ve hala çalışmıyorsa, proje dosyanız açık proje dosyanızla ilgili bir sorun var demektir. Proje dosyası, seçtiğiniz dili desteklemeyen derleyici seçeneklerinden birini kullanıyor. Proje dosyasını notepad ++ ile açın ve aşağıdaki satırı kaldırın.
Orignal Proje Dosyası
<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')" />
Aşağıdaki satırları kaldırın
<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')" />