Windows 2008 Server 컴퓨터에서 새로운 ASP.NET MVC 응용 프로그램 (VS 2015 커뮤니티에서 곧바로)을 실행할 때 해당 오류가 계속 발생했습니다.
Windows 2008 Server 컴퓨터에서 새로운 ASP.NET MVC 응용 프로그램 (VS 2015 커뮤니티에서 곧바로)을 실행할 때 해당 오류가 계속 발생했습니다.
답변:
많은 사람들이 그것에 접근하고 있으므로 여기에 게시하고 싶었습니다.
이 사람 덕분에 미친 쉬운 해결 방법을 찾았습니다. 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>
내 경우 오류의 직접적인 원인은 다음과 같습니다.
이는 잘못된 언어 옵션이 있다는 오류이므로 의미가 있습니다.
하지만 이전에는 잘 작동 했으므로 선택 했어야합니다. 무엇이 바뀌 었습니까? 제가 2015 년을 사용하고있는 동안 제 팀원이 2017 년으로 업그레이드 된 것으로 나타났습니다. 그가 프로젝트를 변경 한 후 언어 버전이 변경되었고 소스 제어에 대한 변경 사항을 받았습니다. 그러나 선택한 버전은 내 버전의 vs에서 사용할 수 없으므로 비어 있습니다. 따라서 오류가 발생했습니다. 언어 드롭 다운에서 값을 선택한 후 (기본값 선택) 새 오류가 나타납니다. 새로운 오류로 인해 최신 버전의 C #을 사용하는 모든 코드 줄에서 빌드 오류가 발생했습니다. 동일한 기능을 수행하도록 코드를 변경했지만 C # 버전 구문과 문제가 해결되었습니다.
따라서 오류의 직접적인 원인은 실제로 잘못된 언어 버전 선택 이었지만 근본 원인은 서로 다른 버전과 / c # 버전이 충돌했기 때문입니다.
제 경우에는 오류가 다음과 같습니다.
오류 CS1617 / langversion에 대한 잘못된 옵션 'latest'; ISO-1, ISO-2, 기본값 또는 1 ~ 6 범위의 정수 여야합니다.
메모장으로 .csproj 파일을 열었 더니 다음 줄을 보았습니다.
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
1에서 6 사이의 정수에 대한 최신 정보를 변경했습니다.
<LangVersion>6</LangVersion>
오류가 사라졌습니다!
제 경우에는 잘못된 MSBuild.exe를 사용했습니다.
C:\Windows\Microsoft.NET\Framework64\v4.0.30319
오류를 해결하기 위해 Visual Studio 2017 MSBuild.exe 사용을 시작하도록 PATH 환경 변수를 업데이트했습니다.
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSbuild.exe
자세한 내용은 다음 링크를 참조하십시오. 오류 CS1056 : tfs 연속 통합 프로세스에서 msbuild를 실행하는 예기치 않은 문자 '$'
언어 버전을 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
나에게 가장 쉬운 해결책은 패키지 관리자를 통해 .Net 컴파일러를 업그레이드하는 것이 었습니다.
설치 패키지 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는 프로젝트 설정에서 새 버전을 선택하여 현재 설정이 프로젝트에 설치된 패키지와 충돌한다고 제안하거나 암시 할 수 있습니다.
(나는 IDE가 실제로 사용하려는 CSC.EXE를 찾기 위해 진단 수준 MSBuild 로깅을 켰습니다)
위의 모든 옵션이 작동하지 않고 Microsoft.Net.Compilers 및 CodeDom과 같은 nuget 패키지를 사용했지만 여전히 작동하지 않는 경우 프로젝트 파일 열기 프로젝트 파일에 문제가있는 것입니다. 프로젝트 파일이 선택한 언어를 지원하지 않는 컴파일러 옵션 중 하나를 사용하고 있습니다. 메모장 ++로 프로젝트 파일을 열고 다음 줄을 제거하십시오.
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')" />
난 그냥은 변경 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>
솔루션 정리 및 다시 빌드 필자의 경우 이전 설정이 불일치로 인해 차단되었습니다. 새 프로젝트를 가져 와서 빌드하고 버전 변경 등을 시도했습니다. 솔루션을 청소하고 빌드가 나를 위해 일했습니다.
제 경우에는 GITHUB에서 mattorg의 keycloak 구현 샘플 코드가 포함 된 라이브러리를 다운로드했습니다 : 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 : / langversion에 대한 잘못된 옵션 '7.3'; 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"폴더가 컴파일 중에 우선권을 가졌습니다.