TFS 소스 제어에서 가져온 Asp.net MVC 프로젝트를 실행하려고합니다. 모든 어셈블리 참조를 추가했으며 오류나 경고없이 성공적으로 빌드하고 컴파일 할 수 있습니다.
그러나 브라우저에 다음과 같은 오류가 발생합니다.
‘C : \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe’경로의 일부를 찾을 수 없습니다.
다음은 오류 페이지의 전체 스크린 샷입니다.
며칠간의 연구 끝에 Roslyn 은 사전 컴파일 기능을 제공하는 .Net 컴파일러 플랫폼이라는 것을 알았습니다 . 그러나 Roslyn과 관련된 것을 구성하지 않았거나 프로젝트에서 Roslyn을 사용하려고하기 때문에 내 빌드가 \ bin \ roslyn \ csc.exe를 찾으려고하는 이유를 이해하지 못합니다.
답변
기본 VS2015 템플릿의 문제점은 컴파일러가 실제로 tfr \ bin \ roslyn \ 디렉토리로 복사되지 않고 {outdir} \ roslyn \ 디렉토리로 복사된다는 것입니다.
이 코드를 .csproj 파일에 추가하십시오.
<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" Condition="!$(Disable_CopyWebApplication) And '$(OutDir)' != '$(OutputPath)'">
<ItemGroup>
<RoslynFiles Include="$(CscToolPath)\*" />
</ItemGroup>
<MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
<Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>
답변
TL; DR
패키지 관리자 콘솔에서이를 실행하십시오.
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
추가 정보
이 문제는 Visual Studio 자체와 관련이 없으므로 파일을 복사하기 위해 빌드 단계를 추가하는 것이 좋습니다. 컴파일러 바이너리를 프로젝트에 수동으로 추가하는 것과 같습니다.
Roslyn 컴파일러는 NuGet 패키지에서 제공되며 해당 패키지의 일부 버전에 버그가 있습니다 (정확히 알 수 없음). 해결책은 해당 패키지를 버그가없는 버전으로 다시 설치 / 업그레이드하는 것입니다. 원래 2015 년에 답을 다시 작성하기 전에 특정 버전에서 다음 패키지를 설치하여 수정했습니다.
- Microsoft.Net.Compilers 1.1.1
- Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.1
그런 다음 .csproj를 살펴보고 <ImportProject>
맨 위에있는 태그 와 맨 <Target>
아래에 “EnsureNuGetPackageBuildImports”라는 이름 으로 패키지 경로가 올바른지 확인했습니다 (내 경우에는 .. \ .. \ packages \ *. *) . 이것은 MVC 5 및 .NET Framework 4.5.2에 있습니다.
답변
\bin\roslyn\csc.exe
다음 패키지가 프로젝트에 추가되었으므로 빌드를 찾으려고합니다 . packages.config
파일을 검토하기 만하면 둘 다 가질 수 있습니다.
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Microsoft.Net.Compilers
Roslyn이란 무엇이며 누가 프로젝트에 추가했는지 (패키지) : .net Framework 4.5.2를 사용하여 VS2015를 사용하여 프로젝트를 만드는 경우 프로젝트 템플릿이 기본적으로 Roslyn을 사용하는 것을 알 수 있습니다. 실제로 Roslyn은
Microsoft의 .NET 언어 용 오픈 소스 컴파일러 중 하나입니다 .Roslyn을 삭제해야하는 이유 :
프로젝트에 Roslyn 참조가 있고 서버를 배포하지 않으려는 경우, 많은 호스팅 제공 업체가 여전히 서버를 업그레이드하지 않아 Roslyn을 지원하지 않으므로 웹 사이트에 원치 않는 오류가 발생합니다. 이 문제를 해결하려면 프로젝트 템플릿에서 Roslyn 컴파일러를 제거해야합니다.
Roslyn 사용에 관심이 없다면
아래 단계 에 따라 삭제하십시오.
1.
NuGet 패키지를 제거하고 Nuget Package Console에서 다음 명령을 사용하십시오.
PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers
2.
이렇게하면 web.config 파일이 자동으로 업데이트됩니다. 그렇지 않은 경우 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>
<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+"></compiler>
</compilers>
</system.codedom>
답변
깨끗하고 재건이 나를 위해 일했습니다!
답변
이 작업을 수행하는 더 많은 MSBuild 방법이 있습니다.
<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" Condition="!$(Disable_CopyWebApplication) And '$(OutDir)' != '$(OutputPath)'">
<ItemGroup>
<RoslynFiles Include="$(CscToolPath)\*" />
</ItemGroup>
<MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
<Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>
그러나 roslyn 파일은 내 bin 디렉토리 (폴더가 아닌)에도 있습니다. 그래도 앱이 작동하는 것 같습니다.
답변
GitHub의 Roslyn 프로젝트의 문제에서 언급했듯이 해결책은 Visual Studio에서 프로젝트를 언로드하고 다시로드하는 것입니다.
“bin \ roslyn”폴더는 프로젝트를 다시로드 할 때까지 빌드 또는 빌드시 작성되지 않았습니다.
답변
나는이 단계를 수행했으며 완벽하게 작동했습니다.
- 모든 bin 및 obj 폴더를 삭제하십시오.
- 깨끗한 솔루션 및 재 구축
- powershell에서이 명령을 실행하십시오.
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r