CodeDom 공급자 유형 "Microsoft.코드 돔.공급자.DotNetCompilerPlatform.CSSharpCodeProvider"를 찾을 수 없습니다.
VS2015를 활용한 WebApi 프로젝트입니다.
재생산 단계:
- 빈 WebApi 프로젝트 만들기
- 빌드 출력 경로를 "bin\"에서 "bin\Debug\"로 변경합니다.
- 달려.
빌드 출력 경로를 "bin\"에서 "bin\Debug\"로 변경하기 전까지는 모든 것이 완벽하게 작동합니다. 실제로 "bin\" 이외의 출력 경로는 작동하지 않습니다.
한 가지 추가적인 것은 "bin\"에 빌드를 남겨두는 한 어디든 다른 출력 경로를 사용할 수 있다는 것입니다.
이를 해결할 수 있는 해결책을 제공할 수 있도록 도와주시기 바랍니다.실제 배치 시 문제가 발생할 것으로 예상됩니다.
프로젝트에 Roslyn 참조가 있고 IIS 서버에 배포하는 경우 많은 호스팅 공급자가 여전히 서버를 업그레이드하지 않아 Roslyn을 지원하지 않기 때문에 웹 사이트에서 원하지 않는 오류가 발생할 수 있습니다.
이 문제를 해결하려면 프로젝트 템플릿에서 Roslin 컴파일러를 제거해야 합니다.Roslin을 제거해도 코드의 기능에 영향을 미치지 않습니다.그것은 저와 제가 일했던 다른 프로젝트(C# 4.5.2)에도 잘 작동했습니다.
다음 단계를 수행합니다.
아래에 표시된 명령줄을 사용하여 다음 Nuget 패키지에서 제거합니다(또는 Root Project Solution을 마우스 오른쪽 버튼으로 클릭하여 제거하면 Nuget Package Manager의 GUI를 사용할 수 있습니다).
PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform PM> Uninstall-package Microsoft.Net.Compilers
웹에서 다음 코드를 제거합니다.파일을 구성하고 IIS를 다시 시작합니다.(1단계로 문제가 해결되지 않는 경우에만 이 방법을 사용하십시오.)
<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>
이 답변의 조언을 따르는 것에 주의하세요.당면한 문제를 해결하는 동안 나중에 다른 문제를 일으킬 수 있습니다.
저도 같은 문제가 생겼어요.가 .NET 파일에 것 .GAC
이 문제를 해결하기 위해 제가 한 일은:
먼저 패키지 관리자 콘솔에 다음을 입력합니다.
PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
어떤 이유에서인지 마이크로소프트의 멋진 신사분들은 우리를 위해 GAC에 설치하지 않기로 결정했습니다.개발자 명령 프롬프트를 열고 다음을 입력하여 수동으로 수행할 수 있습니다.
gacutil -i "C:\*PATH TO YOUR APP CODE*\bin\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll"
결론
마이크로소프트는 모든 사람들이 너겟으로 모든 것을 할 수 있도록 격려하려고 노력합니다. 너겟 시스템에서 가끔 마주치는 버그 없이도 문제가 없을 수 있습니다.서로 다른 솔루션에서 동일한 프로젝트를 사용하려고 시도합니다. 실수로(또는 그렇지 않은) 한 솔루션에 사용되는 많은 너겟 중 하나를 업데이트합니다. 운이 나쁘면 다른 솔루션을 구축하려고 할 때 제가 의미하는 바를 알게 될 것입니다.반면에 GAC에 파일을 넣는 것은 사람들이 저장한 내용을 잊어버리고 새 환경을 설정할 때 이러한 파일을 포함하는 것을 잊어버리기 때문에 미래의 문제를 야기할 수도 있습니다.다른 가능한 해결책은 파일을 타사 dll의 중앙 폴더에 저장하는 것입니다(컴파일러를 타사라고 부르는 것이 이상하더라도). 이는 새 환경을 설정할 때 참조가 끊기는 문제를 발생시킵니다.Dll을 GAC에 설치하기로 결정한 경우 주의하고 설치한 것을 기억하십시오.그렇지 않다면 각 프로젝트에 대한 너겟을 다시 다운로드하고 그로 인해 발생하는 모든 성가신 버그를 감수하십시오(적어도 내가 마침내 싫증이 나서 GAC에 파일을 배치했을 때 발생하곤 했습니다).두 가지 접근 방식 모두 두통을 유발하고 문제를 일으킬 수 있습니다. 단지 어떤 문제를 다루길 원하는지에 대한 질문일 뿐입니다.마이크로소프트는 너겟 시스템을 사용할 것을 권장하며, 일반적으로 너겟 시스템에 완전히 싫증이 나고 GAC가 당신에게 더 나은 대안이 될 수 있을 만큼 충분히 오랫동안 GAC를 다루는 경우가 아니라면 SO에서 알려지지 않은 프로그래머에게 듣는 것이 더 낫습니다.
다음 너겟 패키지를 프로젝트에 추가하기만 하면 됩니다.Microsoft.CodeDom.Providers.DotNetCompilerPlatform
.
같은 문제가 있었습니다.
Vs2013에서 앱이 작동했던 것과 동일한 문제가 발생하지만 Vs2015로 업데이트한 후 오류가 발생합니다.
- Vs2015에서 프로젝트의 참조 폴더를 마우스 오른쪽 버튼으로 클릭하여 NuGet Package Manager를 엽니다.
- 찾아보기 탭에서 "DotNetCompilerPlatform"을 검색하고 "Microsoft"를 설치합니다.코드 돔.공급자.닷넷 컴파일러 플랫폼" lib
오래된 스레드인 것은 알지만 업데이트 후 DotNetCompilerPlatform.dll, f.x.의 가능한 버전 문제를 지적하고 싶습니다.새로 생성된 Web.config 파일이 릴리스된 web.config 파일과 다른지, 특히 system.codom 부분을 확인하십시오.저의 경우 버전이 1.0.7에서 1.0.8로 변경되었습니다.새 dll은 이미 서버에 복사되었지만 이전 web.config는 변경하지 않았습니다(일부 서버 특수 설정 포함).
<pre>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /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.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
</pre>
두 라인을 업데이트한 후 오류가 사라졌습니다.
당신의 재실행 단계에 따르면, 나는 당신이 애플리케이션을 만든 후에 애플리케이션의 속성에서 출력 경로를 변경하는 것만이 당신의 유일한 변경사항이라고 생각했습니다.이 변경 사항은 Visual Studio에 MSBuild의 출력 어셈블리를 새 폴더에 넣도록 지시하는 것뿐입니다.그러나 런타임에 ASP.Net은 \bin 폴더 대신 이 새 폴더에서 어셈블리를 로드해야 한다는 것을 전혀 알지 못합니다.
이 대답은 WebApi 응용 프로그램의 빌드 출력 디렉터리를 변경하는 방법을 보여줍니다.해당 게시물에 표시된 것과 동일한 오류를 얻으려면 web.config의 전체 <system.codom> 섹션에 주석을 달아야 합니다.그런 다음 지침에 따라 출력 경로를 변경할 수 있습니다.
응용 프로그램을 작업한 후에는 <system.codom> 섹션의 주석을 제거할 수 있습니다.응용 프로그램에서 C#6 새 구문을 전혀 사용하지 않는 경우 Microsoft를 제거할 수 있습니다.코드 돔.공급자.응용 프로그램의 DotNetCompilerPlatform. 그렇지 않으면 빌드 후 이벤트에 다음 명령줄을 추가할 수 있습니다.
xcopy /Q /Y "$(TargetDir)roslyn\*.*" "$(TargetDir)..\roslyn\"
새 CodeDom 공급자는 항상 \bin에서 "\roslin" 폴더를 찾습니다.위 명령은 해결 방법으로 작동하며 새 출력 폴더의 \roslin 폴더를 \bin으로 복사합니다.
그러나 Visual Studio의 게시 도구는 내 출력 경로 설정에 관계없이 출력 어셈블리를 배포 위치의 \bin 폴더에 게시했습니다.애플리케이션이 실제 배포에서도 작동해야 할 것 같습니다.
또 다른 가능한 해결책:
◦ 관리자 권한으로 Visual Studio 인스턴스 다시 시작
쉬운 방법 - 프로젝트 > NuGet 패키지 관리... > Browse(탭) > 검색 입력 세트에서 다음과 같이 설정합니다.마이크로소프트.코드 돔.공급자.닷넷 컴파일러 플랫폼
이 컴파일러를 설치, 업데이트 또는 제거하고 설치할 수 있습니다.
저의 경우, 애플리케이션 폴더의 권한을 변경하고 IIS_IUSRS 계정이 제거되었을 때 이 문제가 발생했습니다.응용프로그램 폴더에 IIS_IUSRS(IIS Manager -> YourWebApp -> Edit Permission -> Add IIS_IUSRS)를 다시 추가한 후 작동했습니다.
프로덕션 서버에 게시한 후 중지되었습니다.이 오류가 표시된 이유는 하위 폴더에 배포되었기 때문입니다.IIS에서 하위 폴더를 마우스 오른쪽 버튼으로 클릭하고 "응용 프로그램으로 변환"을 실행한 후 작동했습니다.
해결 방법은 다음과 같습니다.
- 을 삭제했습니다.
bin
프로젝트 디렉토리에 있는 폴더. - 을
Build Solution
VS2017(관리자로 실행) > 빌드 > 솔루션 빌드.
그 후 문제가 다시 발생했습니다.는 둘다제습니다 둘 다 했습니다.Microsoft.CodeDom.Providers.DotNetCompilerPlatform
그리고.Uninstall-package Microsoft.Net.Compilers
하지만 도움은 없습니다.그런 다음 설치됨 - 도움말 없음.프로젝트를 치료하고 도움말을 작성하지 않았습니다.서버를 다시 시작했습니다. 도움말이 없습니다.그리고 프로젝트에 현재 1.0.5인 최신 버전이 아닌 1.0.3이 필요하다는 것을 알게 되었습니다. 1.0.3 버전을 로드할 수 없다는 오류였습니다.그래서 제가 대신 그 dll 버전을 설치했고 이제 작동합니다.
만약 당신이 git을 사용하고 있다면, 당신은 아마도 커밋의 .dll을 무시하고 있을 것입니다.
ASP은 ASP를 검색하지 .NET이 검색하지 않음bin/debug
또는 다른 유형의 응용프로그램처럼 어셈블리의 빈 아래에 있는 하위 폴더.다음 구성을 사용하여 런타임이 다른 위치를 찾도록 지시할 수 있습니다.
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin;bin\Debug;bin\Release"/>
</assemblyBinding>
</runtime>
</configuration>
솔루션에 여러 프로젝트가 있었는데 웹 프로젝트(이 오류가 발생하는 문제)가 시작 프로젝트로 설정되지 않았습니다.이 웹 프로젝트를 StartUp 프로젝트로 설정하고 메뉴 항목 "Debug"->"Start Debug"를 클릭하면 작동했습니다.디버깅을 중단하고 다시 해보니 다시 작동합니다.이상하다.
아래 명령에서 패키지 관리자 콘솔에서 패키지를 제거하십시오.
PM> Microsoft 패키지를 제거합니다.코드 돔.공급자.닷넷 컴파일러 플랫폼
PM> Microsoft 패키지를 제거합니다.넷 컴파일러
그런 다음 nuget 매니저에서 다시 설치합니다.
프로젝트가 완전히 구축되었는지 확인하십시오!
'출력' 탭을 클릭하고 다음과 같은 항목이 없는지 확인합니다.
모두 재구성: 14개 성공, 1개 실패, 0개 건너뛰기 =========
그리고 당신의 것을 엽니다.bin
폴더를 선택하여 최신 상태인지 확인합니다.
처음에는 무시한 타이프스크립트 오류가 너무 많아서 빌드가 깨지고 DLL이 복사되지 않는다는 것을 잊었습니다.
Microsoft를 업데이트해야 합니다.코드 돔.공급자.DotNetCompilerPlatform" 및 "Microsoft.Net.Compiler" 패키지가 프로젝트에 포함됩니다.
저의 경우 4.5.2에서 웹 응용 프로그램을 실행하고 4.6.1에서 참조된 클래스 라이브러리를 실행했을 때 오류가 발생했습니다.웹 애플리케이션을 4.5.2 버전으로 업데이트했을 때 오류가 사라졌습니다.
응용 프로그램 풀 사용자가 ApplicationPoolIdentity로 설정되었기 때문에 이 오류가 발생했습니다.폴더에 액세스할 수 있는 사용자/서비스 계정으로 변경했더니 오류가 사라졌습니다.
여기 제 연구 결과가 있습니다.저는 오늘 아침에도 이 문제에 직면했습니다.응용 프로그램이 실행 중인 응용 프로그램 풀에 현재 사용자를 추가했습니다.
단계:
IIS 열기
애플리케이션 풀 클릭
문제가 발생하는 응용 프로그램 풀 선택
오른쪽 클릭 -> 고급 설정
ID 옆에 있는 점 아이콘 3개 클릭
이제 사용자 지정 계정 선택
PC 사용자 이름 및 암호 지정
절약하다
응용 프로그램을 새로 고칩니다.그러면 작동하기 시작할 것입니다.dll 액세스에 대한 보안 문제가 발생했습니다.
에 Microsoft.CodeDom.Providers.DotNetCompilerPlatform
패키지, 프로젝트에서 참조된 패키지의 버전이 해당 패키지의 올바른 버전과 동일한 버전을 가리키는지 다시 확인합니다.
ProjectName.csproj
을 보증합니다.<Import>
에 대한 꼬리표.Microsoft.CodeDom.Providers.DotNetCompilerPlatform
이 있으며 올바른 버전을 가리킵니다.ProjectName.csproj
확실히 하라.<Reference>
에 대한 꼬리표.Microsoft.CodeDom.Providers.DotNetCompilerPlatform
존재하며 버전을 .Include
및 속과이<HintPath>
.그프젝의에서.
web.config
확실하게 하는 것.<system.codedom>
태그가 있으며 해당 태그의 자식<compiler>
태그의 버전이 동일합니다.type
기여하다.
어떤 이유로, 나의 경우, 이 패키지를 1.0.5에서 1.0.8로 업그레이드하는 것이 원인이 되었습니다.<Reference>
에 태그를 달다..csproj
그것을 가지다Include
이전 버전 1.0.5.0(패키지를 업그레이드한 후 삭제)을 가리키지만 다른 모든 것은 새롭고 올바른 버전 1.0.8.0을 가리킵니다.
시작 명령에서 inetmgr로 이동 IIS 관리자 콘솔에서 기본 웹 사이트에서 응용 프로그램 폴더를 선택한 다음 해당 폴더를 마우스 오른쪽 단추로 클릭하고 응용 프로그램으로 변환 활성화하여 .asmx 파일을 실행하면 문제가 해결됩니다.
CppCodeProvider 어셈블리에 참조를 추가합니다.
제가 시도한 이 오류와 관련하여:
- 프로젝트 정리 및 재구축
- 프로젝트 언로드 및 재로드
- 대상 프레임워크 수정
- 출력 경로 수정
- GAC에 너겟 추가
- 패키지 삭제
uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
uninstall-package Microsoft.Net.Compilers
다시 설치합니다.
이 모든 것이 유효한 솔루션인 것처럼 보이지만, 저는 새로운 오류만 생성할 수 있었고 결국 특정 참조/너겟이 누락되었을 때 오류가 표시될 수 있습니다.
저의 경우, 저는 최근에 Microsoft Office를 다시 설치하고 Microsoft와 같은 어셈블리를 참조했습니다.사무실. 코어.새 설치에 필요한 패키지가 포함되어 있지 않아 솔루션을 제대로 구축할 수 없었습니다.
Microsoft를 참조할 필요가 없을 정도로 코드를 재작업하여 이 문제를 해결할 수 있었습니다.사무실, 하지만 필요한 패키지를 찾아보고 그에 따라 설치하는 것으로 해결할 수 있었습니다.
Visual Studio의 불분명한 오류 메시지인 것 같습니다.
내 경우 웹 프로젝트가 제대로 로드되지 않았습니다(프로젝트를 사용할 수 없는 것으로 표시됨). 관리 모드에서 비주얼 스튜디오를 연 후 웹 프로젝트를 다시 로드해야 했고 모든 것이 정상적으로 작동했습니다.
프로젝트를 진행 중이었는데 오류가 발생한 것입니다.컴퓨터(또는 서버)를 재부팅하면 문제가 해결됩니다.
프로젝트 위치를 이동하여 가상 디렉터리를 다시 만들어야 했기 때문에 동일한 문제가 발생했습니다.
로컬이 아닌 원격 서버에서 Azure CI가 패키지 폴더에서 이를 읽고 있었지만 위에서 언급한 컴파일러 버전을 찾을 수 없었습니다.
이 문제를 해결하기 위해 우리는 프로젝트 파일을 다음과 같이 수정했습니다.
여기에서는 환경 변수를 직접 참조하는 패키지를 참조하지 않습니다.
이로 인해 문제가 해결되었지만, 우리의 경우 "package.config"에서 직접 패키지를 사용하지 않고 팀 간에 버전 무결성을 유지하기 위해 별도의 폴더가 있습니다.
여확인를부의가 다음과 같은지 합니다.BIN
파일에 폴더가 완전히 업로드되었거나 없습니다.
언급URL : https://stackoverflow.com/questions/33319675/the-codedom-provider-type-microsoft-codedom-providers-dotnetcompilerplatform-cs
'sourcecode' 카테고리의 다른 글
앱이 순수한 스위프트 프로젝트에서 유닛 테스트를 실행하는지 어떻게 알 수 있습니까? (0) | 2023.06.03 |
---|---|
범위 생성에서 '...'(더블 도트)와 '...'(트리플 도트)의 차이는 무엇입니까? (0) | 2023.06.03 |
Android에서 경고 대화 상자를 표시하려면 어떻게 해야 합니까? (0) | 2023.06.03 |
xcode에서 프로그래밍 방식으로 단추에 작업을 추가하는 방법 (0) | 2023.06.03 |
RMagick 설치:Magick Wand를 찾을 수 없습니다. (0) | 2023.06.03 |