bin \ roslyn \ csc.exe 경로의 일부를 찾을 수 없습니다


811

TFS 소스 제어에서 가져온 Asp.net MVC 프로젝트를 실행하려고합니다. 모든 어셈블리 참조를 추가했으며 오류나 경고없이 성공적으로 빌드하고 컴파일 할 수 있습니다.

그러나 브라우저에 다음과 같은 오류가 발생합니다.

'C : \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe'경로의 일부를 찾을 수 없습니다.

다음은 오류 페이지의 전체 스크린 샷입니다.

여기에 이미지 설명을 입력하십시오

며칠간의 연구 끝에 Roslyn 은 사전 컴파일 기능을 제공하는 .Net 컴파일러 플랫폼이라는 것을 알았습니다 . 그러나 Roslyn과 관련된 것을 구성하지 않았거나 프로젝트에서 Roslyn을 사용하려고하기 때문에 내 빌드가 \ bin \ roslyn \ csc.exe를 찾으려고하는 이유를 이해하지 못합니다.


10
컴파일 된 ASP.NET 응용 프로그램을 실행하는 동안 왜 이것이 필요한지 설명 할 수 있습니까? csc.exe은 (는) 무엇 이죠?
gregmac

1
이것이 roslyn의 참여를 설명한다고 생각합니다 : blogs.msdn.microsoft.com/webdev/2014/05/12/…
andy250

4
내가 아래에 설치 패키지 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 설치하여 고정 폴더 로슬린 폴더 bin에 복사하기되지 않았습니다
압둘라에 관한 것은

12
Microsoft.CodeDom.Providers.DotNetCompilerPlatform을 다시 설치하면 문제가 해결되었습니다.
SurenSaluka

4
VS 2019에서 프로젝트를 연 후이 문제가 발생했습니다. 이전 VS 2017에서 작동했습니다 .Microsoft.CodeDom.Providers.DotNetCompilerPlatform을 이전 버전으로 다운 그레이드 한 다음 최신 버전으로 다시 업그레이드하면 문제가 해결됩니다. 내 .csproj파일의 일부 문제가 수정되었습니다 .
Neo

답변:


435

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

9
이 문제는 해결되지 않습니다. 이제 'C : \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe'파일을 찾을 수 없습니다 . VS2015에서 새 MVC 프로젝트를 만들 때 .csproj에 언급 된 구성이 표시되지 않으며 브라우저에서 완벽하게 실행됩니다.
Eyad

4
감사. Roslyn 디렉토리를 다운로드하여 / bin 폴더에 배치 한 후 브라우저에서 프로젝트를 빌드하고 실행할 수 있습니다. 위에서 언급 한 PstBuildEvent를 넣지 않았으며 여전히 작동합니다. 위의 답변을 편집하고 Roslyn 파일을 강제로 배치하고 솔루션을 더 잘 반영해야 할 필요성을 언급하고 싶을 수도 있습니다.
Eyad

2
정상적인 상황에서는 $ (OutDir) roslyn *. * 폴더 안에 컴파일러가 있어야하므로이 스크립트는 컴파일러를 프로젝트의 binfolder에 복사합니다. 분명히 당신의 vs2015 설치에는 컴파일러가 포함되지 않았습니다.
Mitchell

9
Microsoft.CodeDom.Providers.DotNetCompilerPlatform을 1.0.8로 업데이트하면 Microsoft.Net.Compilers 2.6.1이 많은 도움이되었습니다. 이 추가 대상을 추가 할 필요가 없었습니다. 비슷한처럼 보이는이 도구의 최신 버전에 추가되었습니다 github.com/aspnet/RoslynCodeDomProvider/commit/...
이안 로버트슨

5
Nuget에서 Microsoft.Net.Compilers의 버전을 2.10.0으로 업데이트했으며 이것이 나를위한 해결책이었습니다. targetFramework = "4.6.2"
juanytuweb을 사용

1160

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에 있습니다.


11
이것은 내 문제였습니다. 프로젝트를 만들 때 bin / roslyn 폴더가 있습니다. 그러나 프로젝트를 삭제하거나 소스 제어와 같이 복사하지 않으면 다시 빌드되지 않습니다. 버전에 약간의 "동기화"문제가 있다고 생각합니다. 1.0.1을 설치하고 proj 파일로 가져 오기를 올바른 버전으로 업데이트하면 빌드가 자동으로 Roslyn 폴더를 복사합니다. 빌드 명령.
Jester

16
나는 확신이 업데이 트 패키지와 함께 자신이하려고 ... 가장 좋은 방법입니다있어 -reinstall -projectname myprojectname
cr1pto

5
이 모든 작업을 수행 한 후에도 프로젝트에 아무런 변화가 없었습니다. bin 폴더는 여전히 평평합니다.
brianary

8
참고 사항 : Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget 패키지의 버전 1.0.3은 저에게 효과적이지만 버전 1.0.6 은이 질문에서 오류를 발생시킵니다.
Daniel Neel


176

\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=\&quot;Web\&quot; /optionInfer+"></compiler>
    </compilers>
</system.codedom>

28
실제로 새로운 컴파일러와 새로운 기능을 사용 하려는 경우 실제로 솔루션이 아닙니다 .
Matti Virkkunen

14
당신은 미래를 반대하고 있습니다.
cchamberlain

2
@cchamberlain 왜 미래인가? 나는 그것을 사용하는 것이 당연해야한다고 생각하지만 많은 사람들이 그것에 문제가있는 것 같습니다.
Alisson

1
@Alisson-Roslyn은 현재 진행중인 방향입니다. 새로운 언어 기능이 포함되어 있고 성능이 뛰어나고 크로스 플랫폼이며 오픈 소스입니다. 그것은 다른 도구들 이후에 나왔으므로 미래입니다. 아무것도 사용하지 않아도된다고 말하면 대부분의 업그레이드에는 약간의 비용이 발생합니다. "ASP.NET에서 Roslyn 컴파일이 필요한 이유"를 참조하십시오. 섹션 : blogs.msdn.microsoft.com/webdev/2014/05/12/…
cchamberlain

1
GoDaddy 공유 창 호스팅에 MVC 프로젝트를 게시하려는 경우 이것이 정답입니다. GoDaddy는 csc.exe와 같은 실행 파일을 실행하지 않습니다
Jeson Martajaya에게

140

깨끗하고 재건이 나를 위해 일했습니다!


4
나는 청소가 필요하다고 생각하지 않습니다. 이 문제에 대한 논의에 따르면 일반 빌드가 아닌 재구성 은 항상 roslyn 파일을 다시 넣습니다. github.com/dotnet/roslyn/issues/15556
leemicw

또한 Build> Rebuild Solution을 실행하면 오류가 사라졌습니다.
매트 메릴

나를 위해 해결 재 구축, I 출력이 나타났습니다Copying file from "C:\Users\medmondson\Source\UK\Portal\Branches\v12\Source\packages\Microsoft.Net.Compilers.1.3.2\tools\csi.exe" to "bin\Debug\roslyn\csi.exe".
m.edmondson

12
그냥 다시 빌드가 작동하지 않았습니다. Clean + Rebuild 후 오류가 사라졌습니다.
Bruno Miquelin

2
DotNetCompilerPlatform 1.0.3, Microsoft.Net.Compilers 1.3.2, VS Pro 2017 15.9.4는 여기에 있습니다. Visual Studio를 다시 시작하기 전과 후에도 정리 / 재 구축이 작동하지 않았습니다. 마지막으로 Build> Batch Build ...> Rebuild All이 트릭을 수행했습니다. VS가 출력에서 ​​bin / roslyn 디렉토리가 누락되었음을 알 수있는 올바른 것은 아무것도 속삭이지 않았어야합니다.
Johann

59

이 작업을 수행하는 더 많은 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 디렉토리 (폴더가 아닌)에도 있습니다. 그래도 앱이 작동하는 것 같습니다.


4
다른 <Target> 태그와 같은 수준으로 .csproj 파일의 어느 곳에 나 넣을 수 있습니다. 나는 보통 그것을 바닥으로 향하게한다.
Rob Cannon

이것은 정말로 받아 들여지는 대답이어야합니다. 당신은 이것을 소스로 확인할 수 있으며, 당신의 repo를 끌어 당기는 다음 가난한 schmuck은 같은 문제를 겪을 필요가 없습니다.
Andrew Clear

37

GitHub의 Roslyn 프로젝트의 문제에서 언급했듯이 해결책은 Visual Studio에서 프로젝트를 언로드하고 다시로드하는 것입니다.

"bin \ roslyn"폴더는 프로젝트를 다시로드 할 때까지 빌드 또는 빌드시 작성되지 않았습니다.


고마워, 그것은 나를 위해 일했다. 닷넷 리포지토리의 문제는 2016 년에 열렸으며 Visual Studio 2019에서이 문제가 계속 발생합니다. 실제로는 믿을 수 없습니다!
Felipe Oriani

26

나는이 단계를 수행했으며 완벽하게 작동했습니다.

  • 모든 bin 및 obj 폴더를 삭제하십시오.
  • 깨끗한 솔루션 및 재 구축
  • powershell에서이 명령을 실행하십시오.

Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r


22

시가없이 모든 수정 프로그램을 시도한 후 Visual Studios 에서이 Nuget 패키지를 업데이트하여 수정했습니다.

Microsoft.CodeDom.Providers.DotNetCompilerPlatform

광산은 참조를 위해 1.0.0에서 2.0.0 사이였습니다 (오류가 더 이상 표시되지 않음)


3
이것은 나를위한 것이 었습니다. 내 프로젝트에는 2.0.0조차 너무 낮아서 2.0.1이 필요했습니다.
yesman

3
이것은 나를 위해 해결했습니다. 문제를 해결 해야하는 다운 그레이드 한 다음 최신으로 다시 업데이트했습니다.
Daniel Jackson

1
나도 이것을했다. 이제 roslyn폴더가 내 출력 경로에 만들어집니다. 또한 csproj에 "roslyn"참조가 없습니다. 그것은 될 수있다Target Name="CopyRoslyn...내가 가지고 VS2015 것이 아니라 필요에 (버전) 2017입니다. 주목할만한 가치 : 복사 대상 (앞서 언급 한 대상)을 추가 하기 전에 DotnetCompilerPlatform 업데이트 했으므로 csproj가 더 깨끗합니다.
LosManos

1
이것은 나에게 일어난 일입니다. 이 게시물은 생명의 은인입니다. 나는이 같은 오류 메시지를 반복적으로 가지고 있으며 항상 완전히 다른 이유 인 것 같습니다!
Brian Knoblauch

19
  1. 깨끗한 솔루션
  2. 솔루션을 다시 빌드하십시오.이 두 단계는 나를 위해 일했습니다.

고마워요, 이것도 저에게 효과적이었습니다.
Joey Phillips

1
공장. 내가 Ctrl C지점을 체크 아웃하는 도중 git실수로 눌렀고 내 리포지토리가 망가졌습니다. git reset --hard작동하지 않아서 git clean -xdf프로젝트를 다시 빌드해야했습니다. 그러나이 오류가 발생하여 프로젝트를 간단히 정리하고 다시 빌드하면 나에게 도움이되었습니다.
Paul Carlton

15

NuGet 패키지 관리자

Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix를 설치해야합니다. 특히 해당 오류에 대해 작성되었습니다.


이것은 효과가 없었습니다-패키지가 실제로이 정확한 목적이 아니라고 생각합니다.
Drew Miller

VS 2017으로 테스트했으며 제대로 작동하면 다른 버전에서 문제가 될 수 있습니다.
Juan Acosta

11
'dsx'를 닉네임으로 임의의 사람으로부터 임의의 패키지를 설치하고 있지 않습니다. 그것은 큰 보안 번호입니다 ...
Mateusz

1
@Mateusz 또는 비 APS.NET [sic] 폴더 구조를 수정하는 폴더
Eliasar

14
  • 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Nuget 패키지 관리를 선택하십시오.
  • "Microsoft.CodeDom.Providers.DotNetCompilerPlatform"찾기
  • 이전 버전 또는 최신 버전으로 업데이트 한 다음 (어떤 버전은 중요하지 않음) 원래 버전으로 다시 업데이트하십시오.

그러면 패키지의 모든 종속성 및 파일 (예 : csc.exe)이 다시 설치됩니다.

너겟-DotNetCompilerPlatform


이것은 나를 위해 그것을 고쳤다! 감사!
메이슨

11

그래서, 롭 캐논의 대답은 본질적으로 나를 위해 일한,하지만 난 옵션의 소수를 조정할했다. 특히, 빌드 서버에서 프로젝트를 빌드 할 때 $ CscToolPath가 비어 있으므로 대상의 조건을 제거하고 Include 속성을 변경해야했습니다. 흥미롭게도 $ CscToolPath는 로컬로 실행할 때 비어 있지 않았습니다.

<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" >
  <ItemGroup>
    <RoslynFiles Include="$(SolutionDir)packages\Microsoft.Net.Compilers.1.1.1\tools\*" />
  </ItemGroup>
  <MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
  <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>

1
행동이 더 나빠요. 로컬로 패키지 폴더 로 이동하여 Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.nn 폴더 두 개를 삭제하고 코드를 작성하면 $ CscToolPath가 비어있게됩니다. 두 번째로 빌드하면 비어 있지 않습니다. 문제는 항상 "첫 번째 빌드"로 간주되므로 빌드 서버에서 항상 발생합니다. 코드는 완벽하게 작동하지만 Microsoft.Net.Compilers 패키지를 업데이트하면 .csproj 를 업데이트해야합니다 . 감사합니다.
Julien D.

3
Microsoft.Net.Compilers의 버전이 변경되면이 솔루션이 실패하거나 조정해야합니다.
JanDotNet

Microsoft.CodeDom.Providers.DotNetCompilerPlatform을 업그레이드 한 다음 진행할 수있었습니다.
iowatiger08

10

너겟 패키지 업데이트 나에게 도움이되었다. 솔루션> 솔루션에 대한 NuGet 패키지 관리를 마우스 오른쪽 버튼으로 클릭하고 모든 패키지를 업데이트하십시오 : Microsoft.Net.CompilersMicrosoft.CodeDom.Providers.DotNetCompilerPlatform


이것은 이번에 나를 위해 일했습니다. 누락 된 Roslyn / csc.exe 오류가 지속적으로 발생하며 해결책은 상당히 다릅니다 ...
Brian Knoblauch

10

이것은 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6 의 알려진 문제 입니다 . 1.0.5로 다운 그레이드하면이 문제가 해결되었습니다.


맞습니다. Azure에 게시 할 때만 버전 1.0.6 에서이 문제가 발생했습니다. 1.0.5 작품에 다운 그레이드
아우 바레토

2.0.0에서 1.0.5로 다운 그레이드되었으며 작동했습니다. 그러나 당시에는 칠면조 샌드위치를 ​​먹었을 것입니다. 그림을 이동.
barneymc

10

VS 2019의 경우 다음 노드를 완전히 제거하십시오.

<system.codedom>
</system.codedom>

9

Daniel Neel의 코멘트에 따라 :

Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget 패키지 버전 1.0.3이 저에게 효과적이지만 버전 1.0.6으로 인해이 질문에 오류가 발생합니다.

1.0.3으로 다운 그레이드하면이 문제가 해결되었습니다.



@akatakritos 이것이 도움이되었습니다. 나는 몇 시간을 찾고 있었다. 둘 다 감사합니다.
erincerol

2
1.0.7은 특정 시나리오에서 여전히 영향을받습니다. github.com/aspnet/RoslynCodeDomProvider/issues/17
altso

1
1.0.5는 나를 위해 일한 가장 최신 버전입니다 (1.0.6 및 1.0.7에서 오류가 발생 함)
Patrick

동일하게, 나는 1.0.7이고 작동하지 않을 것입니다. 1.0.3 작동합니다. 나는이 문제로 내 인생의 마지막 시간을 낭비했기 때문에 더 높은 것을 시도하지 않았으며 더 이상 문제가되지 않습니다.
Philip Stratford

9

필자의 경우 Jenkins에서 Octopus에 배포하려고 할 때 다음 오류가 발생하여 문제가 발생했습니다.

MSBUILD : OctoPack error OCT-1676060969: Failed to build the path for '\bin\roslyn\csc.exe' relative to 'T:\workspace\machine.engine\Machine.engine.Test': Invalid URI: The format of the URI could not be determined.. See the inner exception for more details. [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: System.Exception: Failed to build the path for '\bin\roslyn\csc.exe' relative to 'T:\workspace\machine.engine\Machine.engine.Test': Invalid URI: The format of the URI could not be determined.. See the inner exception for more details. ---> System.UriFormatException: Invalid URI: The format of the URI could not be determined. [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind) [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at System.Uri..ctor(String uriString) [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.Util.OctopusPhysicalFileSystem.GetPathRelativeTo(String fullPath, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\Util\OctopusPhysicalFileSystem.cs:line 211 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    --- End of inner exception stack trace --- [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.Util.OctopusPhysicalFileSystem.GetPathRelativeTo(String fullPath, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\Util\OctopusPhysicalFileSystem.cs:line 224 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.CreateOctoPackPackage.AddFiles(XContainer nuSpec, IEnumerable`1 sourceFiles, String sourceBaseDirectory, String targetDirectory, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\CreateOctoPackPackage.cs:line 443 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.CreateOctoPackPackage.Execute() in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\CreateOctoPackPackage.cs:line 190 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
Done Building Project "T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj" (default targets) -- FAILED

원인

시간을 보낸 후에는을 사용하는 내부 개발 구성 요소를 사용하고있었습니다 Microsoft.Net.Compilers. 내부 구성 요소를 사용하는 이유는 Microsoft.Net.Compilers이 문제를 극복하고 ( C # : throw invalid expression compilation )이 방법으로 해결되었습니다 ( Visual Studio 2015에서 C # 7을 사용하는 방법? ). 결과적으로 주 프로그램에 구성 요소를 설치하면 Microsoft.Net.Compilers자동으로 추가됩니다.

해결책

내 해결 방법은 내부 구성 요소에서 다음을 제거하여 @malikKhalil 답변을 따르는 것입니다.

PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers

그리고 C # 6 대신 Jenkins에서 C # 7 컴파일러를 선택하고 다시 빌드하면 모든 것이 올바르게 작동하고 빌드되도록합니다.

마침내 주 프로그램에서보다 내부 구성 요소를 업데이트하려고했습니다. 그리고 다시 빌드하는 것보다 모든 것. 문제 나 문제없이 구축되었습니다.


8

필자의 경우 Visual Studio Solution Explorer (웹 응용 프로그램 프로젝트)의 bin 디렉토리로 이동하여 roslyn 프로젝트를 직접 포함해야했습니다. 폴더를 마우스 오른쪽 버튼으로 클릭하고 프로젝트에 포함을 선택하십시오. 그리고 솔루션을 다시 체크인하여 빌드 프로세스를 시작하십시오.

roslyn 폴더는 기본적으로 포함되지 않았습니다.


7

Microsoft.CodeDom.Providers.DotNetCompilerPlatform1.0.0에서 1.0.1로 업그레이드 하면이 문제가 해결되었습니다.


6

프로젝트 파일을 열고 Import Project = ".. \ packages \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 ....을 사용하여 모든 참조를 제거 하십시오.

web.config를 열고 모든 system.codedom 컴파일러 속성을 제거하십시오.


6

이미 지적한 바와 같이 /programming/32780315#34391473 , 빠른 수정 패키지 관리자를 사용하는 것입니다 Tools> Nuget Package Manager> Package Manager Console, 실행

Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

패킷 관리자 콘솔-여는 방법

그러나 패키지가없는 경우 자동으로 자동으로 다시 만드는 대체 솔루션은 프로젝트 Web.config파일 의 속성을 제거하는 것입니다 .
( 파일 Web.config과 같은 디렉토리에 있습니다 .csproj.)

Web.config텍스트 편집기 (또는 Visual Studio 내) 에서 파일을 엽니 다 .
- 태그에서 configuration> system.codedom> compilers> compiler language="c#;cs;csharp"완전히 제거 type속성을.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- ... -->
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.5.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.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>
</configuration>

요컨대,로 시작하는 줄을 제거하십시오 type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.

(아마도 동일한 수정이 Visual Basic 및 Csharp에서도 작동하지만 시도하지는 않았습니다.)

Visual Studio가 나머지를 처리합니다. 더 이상 없습니다 Server Error in '/' Application.

위의 zip 파일에 제공된 예제 코드에서 이제 + HTTP Error 403 를 누르면 얻을 수 있습니다 .CtrlF5

HTTP 403.14 오류-금지

http://localhost:64195웹 브라우저에서로 바꾸 십시오 http://localhost:64195/api/products.
이제 웹 API가 다음과 같이 표시됩니다.

제품을 포함하는 웹 API

도발로 packageVisual Studio 솔루션 의 전체 디렉토리를 제거하려고했습니다 .
내가 (다시) 빌드하자마자 자동으로 조용히 다시 만들어졌습니다.


마지막으로 오류를 재현하는 코드는 다음과 같습니다. http://schulze.000webhostapp.com/vs/SrvrErr-reproduce.zip (원래 https://github.com/aspnet/AspNetDocs/tree/master/aspnet / web-api / overview / advanced / calling-a-web-api-from-a-net-client / sample / server / ProductsApp )

서버 오류


6

내 경우에는 bin 폴더 내부의 모든 것을 삭제하고 다시 컴파일하면 모든 작업이 완료되었습니다.


2
나는 이것이 더 간단하고 효과적이라고 생각합니다. 일반적으로 저장소에서 새 컴퓨터로 프로젝트를 복제 한 후이 오류가 발생합니다.
Jonathan Ortega

이것을 시도한 후 디버거에서 실행할 때 IIS Express에서 403 Forbidden을 받았습니다. Visual Studio를 다시 시작해도 도움이되지 않지만 Windows를 다시 부팅하면 도움이되었습니다.
Florian Winter

6

프로젝트를 실행하는 동안 동일한 문제가 발생했습니다. 다음 단계를 따르십시오.

  1. 솔루션을 마우스 오른쪽 버튼으로 클릭
  2. 깨끗한 용액을 선택하십시오
  3. 청소가 성공하면 프로젝트를 다시 빌드하십시오.
  4. 프로젝트를 다시 실행하십시오

이번에는 같은 오류가 표시되지 않았습니다. 이것은 예상대로 작동합니다.


동료들은 콘솔에서 NuGet 패키지를 업데이트해도 작동하지만 명령을 실행하지 않고도 작동한다고보고했습니다. 내가 선택한 답변.
tsemer

5

이 StackOverflow 질문 에서처럼 MVC에서 Razor 뷰를 컴파일하기 위해 ASPNETCOMPILER를 추가하는 경우 Roslyn nuget 패키지가있는 위치 (일반적으로 $ CscToolPath 변수 를 통해 지정됨 )로 PhysicalPath를 변경하십시오 .

<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(CscToolPath)" />


5

기본 VS2015 템플릿의 문제점은 컴파일러가 실제로 {outdir}_PublishedWebsites\tfr\bin\roslyn\디렉토리가 아니라 디렉토리로 복사 된다는 것 {outdir}\roslyn\입니다. AppHarbor솔루션을 "제자리에"구축하는 대신 출력 디렉토리를 사용하여 앱을 빌드 하므로 이는 로컬 환경과 다를 수 있습니다 .

수정하려면 .csprojxml 블록 바로 다음에 파일 끝에 다음을 추가하십시오.<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">...</Target>

<PropertyGroup>
  <PostBuildEvent>
    if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn"
    start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"
  </PostBuildEvent>
</PropertyGroup>

참조 : https://support.appharbor.com/discussions/problems/78633-cant-build-aspnet-mvc-project-generated-from-vstudio-2015-enterprise


1
/ d 옵션은 최신 파일 만 복사합니다 ( "날짜"를 나타냄). 시간이 현지 시간보다 늦거나 앞날 수있는 클라우드 / azure에 배포해야합니다.
Max

4

필자의 경우 Basim과 비슷하게 컴파일러에 C # 6이 필요하다고 알려주는 NuGet 패키지가있었습니다.

NuGet 패키지 Microsoft.CodeDom.Providers.DotNetCompilerPlatform를 제거한 다음 다음을 제거했습니다.

  1. <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" /> packages.config 파일에서
  2. <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=\&quot;Web\&quot; /optionInfer+" /> </compilers> </system.codedom>

에서 system.codedom이 로슬린 초래 왜 노드, 당신은 볼 수 있습니다 :compilerOptions="/langversion:6


1
NuGet 패키지 "Microsoft.CodeDom.Providers.DotNetCompilerPlatform"을 제거하기 만하면 해결되었습니다 (프로젝트는 .NET 4.5.2를 대상으로 함).
BlueSky

1
이것은 나를 위해 일했습니다. 또한이 추가 종속성을 유지할 이유가 없으므로 Microsoft.Net.Compilers를 제거하고 싶을 것입니다.
항상 배우기

4

솔루션 탐색기에서 Bin 폴더를 삭제하고 솔루션을 다시 빌드하십시오. 문제를 해결할 것입니다


감사! 저에게도 효과가있었습니다. 그 외에도 모든 Nuget 패키지를 업데이트했습니다
Andre Kraemer

4

모든 것이 localhost에서 완벽하게 작동했을 때 서버에 응용 프로그램을 설치할 때도 같은 문제가있었습니다.

이 솔루션 중 어느 것도 우습지 않았으며 항상 같은 오류가 발생했습니다.

Could not find a part of the path 'C:\inetpub\wwwroot\myApp\bin\roslyn\csc.exe'

나는 이것을 끝내었다.

  • 설정 프로젝트에서 오른쪽 클릭,보기> 파일 시스템
  • 만들 bin/roslyn폴더를
  • 추가> 파일을 선택하고에서 모든 파일을 추가하십시오. packages\Microsoft.Net.Compilers.1.3.2\tools

이것은 내 문제를 해결했습니다.


4

Windows를 재부팅하십시오.

이것은 재구성, 컨텐츠 삭제 bin및 재구성 을 시도한 후 Visual Studio를 다시 시작한 후에 저에게 효과적이었습니다.

끔찍한 C # /. NET 빌드 도구의 또 다른 예입니다.

(많은 답변을 읽은 후) 전반적인 결론은이 문제의 원인과 해결책이 설정 및 프로젝트에 크게 좌우된다는 것이므로 한 답변이 효과가 없다면 다른 답변을 시도해보십시오. NuGet 패키지를 엉망으로 만들거나 개발 도구를 다시 설치하기 전에 Visual Studio 다시 시작, 재부팅, 다시 작성 등과 같은 비 침입 / 파괴적인 솔루션을 먼저 사용해보십시오. 행운을 빕니다!

(참고 : Visual Studio 2019 사용 및 프로젝트 파일은 원래 Visual Studio 2015에서 생성되었습니다. 누군가가 문제를 조사하는 데 도움이 될 수 있습니다)

(편집 : 설치 프로그램이 재부팅하라는 메시지를 표시 할 때 Visual Studio 설치를 설치 / 수정하거나 Visual Studio를 업데이트 한 후 다시 부팅하지 않으면이 문제가 발생할 수 있습니까?)


3

csproj 파일이없는 웹 프로젝트가 있으며 여기에 언급 된 솔루션이 효과가 없습니다.

대상 .NET 프레임 워크를 변경 Update-Package -reinstall하고 패키지 ( )를 다시 설치 한 다음 프로젝트를 빌드하면 나에게 도움이되었습니다. 이 작업 후에 대상 프레임 워크를 다시 변경할 수도 있습니다 (나중에 nuget 패키지를 다시 설치해야합니다).


이것은 "웹 사이트 프로젝트"입니다. 이 명령을 사용하여 하나의 패키지 만 다시 설치했습니다.update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -reinstall
GarDavis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.