Não foi possível encontrar uma parte do caminho… bin \ roslyn \ csc.exe


813

Estou tentando executar o projeto asp.net MVC recuperado do controle de origem TFS. Adicionei todas as referências de montagem e sou capaz de criar e compilar com êxito sem nenhum erro ou aviso.

Mas eu recebo o seguinte erro no navegador:

Não foi possível encontrar uma parte do caminho 'C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe'.

Aqui está uma captura de tela completa da página de erro.

insira a descrição da imagem aqui

Após alguns dias de pesquisa, entendi que Roslyn é a plataforma de compilador .Net que oferece recursos avançados de compilação. No entanto, não entendo por que minha compilação está tentando encontrar \ bin \ roslyn \ csc.exe porque não configurei nada relacionado a Roslyn e não pretendo usá-lo em meu projeto.


10
Alguém pode explicar por que isso é necessário como parte da execução de um aplicativo ASP.NET compilado? Para que ele está usando o csc.exe?
— gregmac

1
Acho que isso explica o envolvimento de roslyn: blogs.msdn.microsoft.com/webdev/2014/05/12/…
— andy250

4
pasta Roslyn não estava sendo copiado na pasta bin i fixa-lo, instalando o abaixo Instale-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
— Abdullah Tahan

12
A reinstalação do Microsoft.CodeDom.Providers.DotNetCompilerPlatform resolveu meu problema.
— SurenSaluka

4
Eu estava tendo isso depois de abrir meu projeto no VS 2019. Ele funcionava anteriormente no VS 2017. Descobri que simplesmente fazer o downgrade do Microsoft.CodeDom.Providers.DotNetCompilerPlatform para qualquer versão anterior e voltar para a versão mais recente resolveu o problema. Corrigiu alguns problemas no meu .csprojarquivo.
— Neo

Respostas:


436

O problema com os modelos padrão do VS2015 é que o compilador não é realmente copiado para o diretório tfr \ bin \ roslyn \, mas para o diretório {outdir} \ roslyn \

Adicione este código no seu arquivo .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
Isso não resolve o meu problema. Agora, recebo 'Não foi possível encontrar o arquivo' C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe '' . Por favor, observe que quando eu criar um novo projeto MVC no VS2015 Eu não vejo a configuração mencionado no .csproj e funciona perfeitamente bem no navegador
— Eyad

4
Obrigado. Agora, sou capaz de criar e executar o projeto no navegador depois de baixar o diretório Roslyn e colocá-lo na pasta / bin. Eu não coloquei o PstBuildEvent mencionado acima e ainda funciona. Talvez você queira editar sua resposta acima e mencionar a necessidade de colocar manualmente os arquivos do Roslyn e refletir melhor a solução.
— Eyad

2
Bem, em uma situação normal; você deve ter o compilador dentro da pasta $ (OutDir) roslyn *. *, para que este script copie o compilador para a pasta de pastas do seu projeto. Aparentemente, sua instalação do vs2015 não incluiu o compilador.
— Mitchell

9
Eu achei que atualizar o Microsoft.CodeDom.Providers.DotNetCompilerPlatform para 1.0.8 e o Microsoft.Net.Compilers 2.6.1 me ajudou muito. Não preciso adicionar esse alvo extra. Parece que algo semelhante foi adicionado em uma versão posterior do ferramental: github.com/aspnet/RoslynCodeDomProvider/commit/...
— Ian Robertson

5
Atualizei a versão do Microsoft.Net.Compilers para a versão 2.10.0 do Nuget e ela tem sido a solução para mim. Estou usando targetFramework = "4.6.2"
— juanytuweb 16/11

1163

TL; DR

execute isso no Package Manager Console:

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

Mais Informações

Esse problema não está relacionado ao próprio Visual Studio, portanto, as respostas sugerindo a adição de etapas de compilação para copiar arquivos são uma solução alternativa. O mesmo ocorre com a adição manual de binários do compilador ao projeto.

O compilador Roslyn vem de um pacote NuGet e há / houve um bug em algumas versões desse pacote (não sei exatamente quais). A solução é reinstalar / atualizar esse pacote para uma versão livre de erros. Originalmente, antes de escrever a resposta em 2015, eu a corrigi instalando os seguintes pacotes em versões específicas:

  • Microsoft.Net.Compilers 1.1.1
  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.1

Depois, procurei no .csproj e verifiquei se os caminhos para os pacotes estão corretos (no meu caso .. \ .. \ packages \ *. *) Dentro das tags <ImportProject>na parte superior e <Target>com o nome "GuaranteNuGetPackageBuildImports" na parte inferior. Isso está no MVC 5 e no .NET Framework 4.5.2.


11
Esse foi o meu problema - a pasta bin / roslyn está lá quando um projeto é criado; no entanto, se você excluí-lo ou, como o controle de origem, ele não for copiado, não será reconstruído. Eu acho que há um pouco de um problema de "sincronização" com as versões, uma vez que a 1.0.1 é instalada e atualiza o arquivo Import in proj para a versão correta, uma compilação copia automaticamente a pasta Roslyn - não há necessidade de nenhuma dessas postagens comandos de construção.
— Jester

16
Tenho certeza de que esta é a melhor solução ... tentando isso mesmo com uma-pacote de atualização -reinstall -projectname MyProjectName
— cr1pto

5
Depois de fazer tudo isso, nada mudou para o meu projeto. A pasta bin ainda está achatada.
— brianary

8
Uma observação: a versão 1.0.3 do pacote Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget funciona para mim, mas a versão 1.0.6 causa o erro nesta pergunta.
— Daniel Neel


176

Sua compilação está tentando encontrar \bin\roslyn\csc.exeporque os seguintes pacotes foram adicionados ao seu projeto. Basta revisar seu packages.configarquivo, você pode ter os dois lá

Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Microsoft.Net.Compilers

O que é Roslyn e Quem os adicionou (pacotes) no projeto: Se você estiver usando o .net Framework 4.5.2 para criar projetos usando o VS2015, talvez tenha notado que os modelos de projeto usam o Roslyn por padrão. Na verdade, Roslyn é um dos compiladores de código aberto para linguagens .NET da Microsoft.

Por que devemos excluir o Roslyn: se o seu projeto tem referências ao Roslyn e você está interessado em implantá-lo em nenhum servidor, você receberá erros indesejados no site, pois muitos provedores de hospedagem ainda não fizeram o upgrade dos servidores e, portanto, não oferecem suporte ao Roslyn. Para resolver esse problema, você precisará remover o compilador Roslyn do modelo de projeto.

se você não estiver interessado em usar o Roslyn, siga as etapas abaixo para excluí-lo

1. Remova os pacotes NuGet, use os seguintes comandos do Nuget Package Console

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

2. Depois de fazer isso, seu arquivo web.config deve ser atualizado automaticamente. Caso contrário, procure o código abaixo no web.configarquivo e, se for encontrado, exclua este trecho de código.

<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
Esta não é realmente uma solução se você realmente deseja usar o novo compilador e os novos recursos.
— Matti Virkkunen

14
Você está defendendo o futuro.
— Cchamberlain 12/04

2
@cchamberlain por que é o futuro? Eu apenas acho que deve ser fácil de usar, mas parece que muitas pessoas estão tendo problemas com isso.
— Alisson

1
@Alisson - Roslyn é a direção em que as coisas estão indo. Ele contém novos recursos de idioma, é mais eficiente, é multiplataforma e de código aberto. Saiu depois das outras ferramentas - daí o futuro. Nada diz que você precisa usá-lo; a maioria das atualizações incorre em algum custo. Consulte o "Por que a compilação de Roslyn no ASP.NET?" seção: blogs.msdn.microsoft.com/webdev/2014/05/12/…
— cchamberlain

1
se você deseja publicar o projeto MVC na hospedagem compartilhada de janelas do GoDaddy, esta é a resposta. O GoDaddy não executa executáveis ​​como o csc.exe
— Jeson Martajaya

141

Uma limpeza e reconstrução funcionou para mim!


4
Eu não acho que a limpeza é necessária. De acordo com essa discussão sobre o problema, uma reconstrução não uma construção regular sempre colocará o arquivo roslyn de volta. github.com/dotnet/roslyn/issues/15556
— leemicw 28/03

Eu também simplesmente executei Build> Rebuild Solution e o erro desapareceu.
— Matt Merrill

Reconstruir resolvido para mim, eu observei este na saídaCopying 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
Apenas reconstruir não funcionou para mim .. Após o Clean + Rebuild, o erro desapareceu.
— Bruno Miquelin 22/10

2
DotNetCompilerPlatform 1.0.3, Microsoft.Net.Compilers 1.3.2, VS Pro 2017 15.9.4 aqui. Uma limpeza / reconstrução não funcionou para mim, mesmo antes e depois de reiniciar o Visual Studio. Finalmente, um Build> Batch Build ...> Rebuild All fez o truque. Ele deve ter sussurrado o doce-nada certo para fazer o VS ver que estava faltando o diretório bin / roslyn na saída.
— Johann

59

Aqui está uma maneira mais MSBuild de fazer isso.

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

Mas percebo que os arquivos roslyn também estão no meu diretório bin (não em uma pasta). O aplicativo parece funcionar, no entanto.


4
Você pode colocá-lo em qualquer lugar do seu arquivo .csproj, no mesmo nível de outra tag <Target>. Eu costumo colocá-lo no fundo.
— 22816 Rob Cannon

Esta realmente deve ser a resposta aceita. Você pode verificar isso na fonte e o próximo pobre idiota que puxa seu repositório não terá que passar pelo mesmo problema.
— Andrew Limpar

37

Conforme observado em um problema no projeto Roslyn no GitHub , uma solução (que funcionou para mim) é simplesmente descarregar e recarregar o projeto no Visual Studio.

A pasta "bin \ roslyn" não foi criada na construção ou reconstrução até eu recarregar o projeto.


Obrigado, funcionou para mim. O problema no repositório dotnet foi aberto em 2016 e ainda temos esse problema no Visual Studio 2019. Não acredito que seja real!
— Felipe Oriani

26

Eu segui esses passos e funcionou perfeitamente

  • Exclua todas as pastas bin e obj
  • Solução limpa e reconstrução
  • Execute este comando no PowerShell

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


22

Depois de tentar todas as correções sem charuto, eu a corrigi atualizando este pacote Nuget no Visual Studios:

Microsoft.CodeDom.Providers.DotNetCompilerPlatform

O meu foi de 1.0.0 a 2.0.0 para referência (o erro não aparece mais)


3
Foi isso para mim também. Mesmo o 2.0.0 era muito baixo para o meu projeto, ele exigia o 2.0.1.
— yesman

3
Isso resolveu para mim. Fiz um downgrade que deve ter corrigido o problema e, em seguida, atualizei novamente para o mais recente.
— 9138 Daniel Jackson

1
Eu também fiz isso. Agora a roslynpasta é criada no meu caminho de saída. Também não vejo nenhuma referência "roslyn" no meu csproj. Ele poderia ser que Target Name="CopyRoslyn...é uma coisa VS2015 e não em necessário (a versão) 2017 eu tenho. Vale ressaltar: como atualizei o DotnetCompilerPlatform antes de começar a adicionar um destino de cópia (o que mencionei), tenho um csproj mais limpo.
— LosManos 25/03/19

1
Este aconteceu comigo. Este post é um salva-vidas. Eu tenho essa mesma mensagem de erro repetidamente e sempre parece ser uma razão completamente diferente!
— Brian Knoblauch

19
  1. Solução Limpa
  2. Solução de reconstrução, essas duas etapas funcionaram para mim.

Obrigado, isso funcionou para mim também.
— Joey Phillips

1
Trabalho. Pressionei acidentalmente Ctrl Cquando estava no meio de um galho gite ele estragou meu repositório. git reset --hardnão funcionou, então eu git clean -xdfe tive que reconstruir o projeto. No entanto, encontrei esse erro, então simplesmente limpei e reconstruí o projeto novamente e ele funcionou para mim.
— Paul Carlton

15

Gerenciador de Pacotes NuGet

Você precisa instalar o Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix, foi criado especialmente para esse erro


Isso não funcionou - suspeito que o pacote não seja exatamente para esse propósito exato.
— Drew Miller

Eu testei com o VS 2017 e funciona bem, pode ser um problema com outras versões.
— Juan Acosta

11
Não estou instalando pacotes aleatórios de pessoa aleatória com 'dsx' como apelido. Que é grande segurança não ...
— Mateusz

1
@Mateusz ou um que iria corrigir o meu non-APS.NET [sic] pasta estrutura
— Eliasar

14
  • Clique com o botão direito do mouse no seu projeto e selecione Gerenciar Pacotes de Nuget
  • Encontre "Microsoft.CodeDom.Providers.DotNetCompilerPlatform"
  • Simplesmente atualize para uma versão mais antiga ou mais recente (não importa qual) e, em seguida, atualize novamente para a versão original.

Isso reinstala todas as dependências e arquivos do pacote (como csc.exe)

Nuget - DotNetCompilerPlatform


Isso consertou para mim! Obrigado!
— Mason

11

Portanto, a resposta de Rob Cannon funcionou essencialmente para mim, mas tive que ajustar algumas das opções. Especificamente, tive que remover a condição no destino e alterar o atributo Incluir, pois $ CscToolPath estava vazio quando o projeto estava sendo construído em nosso servidor de compilação. Curiosamente, $ CscToolPath NÃO estava vazio ao executar localmente.

<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
O comportamento é ainda pior. Localmente, se você for para a pasta do pacote e excluir as duas pastas Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.nn e criar seu código, o $ CscToolPath estará vazio. Se você construir uma segunda vez, não ficará vazio. O problema acontece o tempo todo no servidor de compilação, porque é sempre considerado como uma "primeira compilação". Seu código funciona perfeitamente, mas se você atualizar o pacote Microsoft.Net.Compilers , precisará atualizar o .csproj . Obrigado.
— Julien D.

3
Observe que esta solução falhará (ou precisará ser ajustada) se a versão do Microsoft.Net.Compilers for alterada.
— JanDotNet

Atualizei o Microsoft.CodeDom.Providers.DotNetCompilerPlatform e fui capaz de prosseguir.
— precisa saber é o seguinte

10

Atualizar pacotes de nuget funcionou para mim Clique com o botão direito do mouse na solução> Gerenciar pacotes do NuGet para solução e atualize todos os pacotes e, especialmente: Microsoft.Net.Compilers e Microsoft.CodeDom.Providers.DotNetCompilerPlatform


Isso funcionou para mim neste momento. O Roslyn / erro csc.exe faltando trata-se de me constantemente e a solução é diferente, muitas vezes ...
— Brian Knoblauch


10

Para o VS 2019, remova completamente o seguinte nó:

<system.codedom>
</system.codedom>

9

Por um comentário de Daniel Neel acima:

versão 1.0.3 do pacote Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget funciona para mim, mas a versão 1.0.6 causa o erro nesta pergunta

A atualização para a versão 1.0.3 resolveu esse problema para mim.



@akatakritos isso ajudou. Eu estava procurando por horas. obrigado a ambos.
— Erincerol


1
1.0.5 é a versão mais recente e que funcionou para mim (1.0.6 e 1.0.7 estão gerando o erro)
— Patrick

Mesmo, eu era 1.0.7 e não funcionaria. 1.0.3 funciona. Não tentei nada mais alto, pois acabei de desperdiçar a última hora da minha vida com esse problema e não estou mais mexendo com ele agora que está funcionando!
— Philip Stratford

9

No meu caso, tive um problema no Jenkins ao tentar implantá-lo no Octopus com o seguinte erro:

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

Causa

Depois de passar algum tempo, eu estava usando um componente interno desenvolvido que estava usando Microsoft.Net.Compilers. O motivo pelo qual o componente interno estava usando Microsoft.Net.Compilersera solucionar esse problema ( C #: lançar compilação de expressão inválida ) e foi resolvido dessa maneira ( como usar o C # 7 com o Visual Studio 2015? ). Esse resultado, quando instalei o componente no programa principal, Microsoft.Net.Compilersfoi adicionado automaticamente.

Solução

Minha solução foi desinstalar a seguir do nosso componente interno por (seguindo a resposta @malikKhalil)

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

E escolheu o compilador C # 7 no Jenkins em vez do C # 6 e reconstrua, para garantir que tudo esteja funcionando e construindo corretamente.

Finalmente, no meu programa principal, tentei atualizar meu componente interno. E tudo o que construir novamente. Foi construído sem problemas ou questões.


8

No meu caso, eu só precisava ir para o diretório bin no Visual Studio Solution Explorer (projeto de aplicativo da web) e incluir o projeto roslyn diretamente. Clicando com o botão direito do mouse na pasta e selecionando Incluir no Projeto. E verifique novamente a solução para acionar o processo de compilação.

A pasta roslyn não foi incluída por padrão.


8

Eu também estava tendo o mesmo problema ao executar o projeto. Aqui estão os passos que eu segui.

  1. Clique com o botão direito na solução
  2. selecione Solução limpa
  3. Após a limpeza bem-sucedida, Construa novamente seu projeto
  4. Execute o projeto novamente

Desta vez, não vi o mesmo erro. Isso funciona como esperado.


Os colegas relataram que a atualização do pacote NuGet a partir do console funciona, mas também funciona sem executar nenhum comando. Minha resposta escolhida.
— tsemer 11/11/19

7

A atualização Microsoft.CodeDom.Providers.DotNetCompilerPlatformda 1.0.0 para a 1.0.1 corrigiu isso para mim.


6

Abra o arquivo do projeto e remova todas as referências com Import Project = ".. \ packages \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 ....

Abra o web.config e remova todos os atributos dos compiladores system.codedom


6

Como já foi observado por /programming/32780315#34391473 , a correção rápida é usar o gerenciador de pacotes, Tools> Nuget Package Manager> Package Manager Console, para executar

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

Packet Manager Console - como abrir

Mas uma solução alternativa (que automaticamente e silenciosamente recria seus pacotes, se estiverem ausentes) é remover um atributo do Web.configarquivo do seu projeto .
( Web.configestá no mesmo diretório que o seu .csprojarquivo.)

Abra o Web.configarquivo em um editor de texto (ou dentro do Visual Studio).
- Na tag configuration> system.codedom> compilers> compiler language="c#;cs;csharp", remover completamente o typeatributo.

<?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>

Em resumo, remova a linha que começa com type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.

(Presumivelmente, a mesma correção funciona para o Visual Basic e para o Csharp, mas eu não tentei.)

O Visual Studio cuidará do resto. Não mais Server Error in '/' Application.

No código de exemplo que forneci no arquivo zip acima, você receberá agora HTTP Error 403 quando pressionar Ctrl+ F5.

Erro HTTP 403.14 - Proibido

Tente substituir http://localhost:64195no seu navegador por http://localhost:64195/api/products.
A API da web agora é exibida como deveria:

Uma API da Web que contém produtos

Como provocação, tentei remover o packagediretório inteiro da minha solução do Visual Studio.
Ele foi recriado automaticamente e silenciosamente assim que eu (re) o construí.


Por último, mas não menos importante, eis o código que reproduz o erro: http://schulze.000webhostapp.com/vs/SrvrErr-reproduce.zip (Originalmente em https://github.com/aspnet/AspNetDocs/tree/master/aspnet / web-api / overview / advanced / chamando-a-web-api-de-um-net-client / sample / server / ProductsApp )

erro de servidor


6

No meu caso, apenas excluir tudo dentro da pasta bin e recompilar fez todo o trabalho para mim.


2
Eu acho que isso é mais simples e eficaz. Normalmente, recebo esse erro depois de clonar um projeto de um repositório em um novo computador.
— Jonathan Ortega

Depois de tentar isso, obtive 403 Proibido no IIS Express ao executar no depurador. Reiniciar o Visual Studio também não ajudou, mas a reinicialização do Windows ajudou.
— Florian Winter

5

Se você estava adicionando o ASPNETCOMPILER para compilar suas visualizações do Razor no MVC, como nesta pergunta do StackOverflow , altere o PhysicalPath para o local onde o pacote de nuget do Roslyn está localizado (geralmente apontado pela variável $ CscToolPath ):

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


5

O problema com os modelos padrão do VS2015 é que o compilador não é realmente copiado para o {outdir}_PublishedWebsites\tfr\bin\roslyn\diretório, mas para o {outdir}\roslyn\diretório. Provavelmente, isso é diferente do ambiente local, pois AppHarborcria aplicativos usando um diretório de saída em vez de criar a solução "no local".

Para corrigi-lo, adicione o seguinte no final do .csprojarquivo, logo após o bloco xml<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>

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


1
A opção / d copia apenas arquivos mais recentes (significa "data"). Lembre-se de implantar no cloud / azure, onde o tempo pode estar atrasado / adiantado em relação ao horário local.
— Max

4

No meu caso, semelhante ao Basim, havia um pacote NuGet que dizia ao compilador que precisávamos do C # 6, o que não era necessário.

Tivemos que remover o pacote NuGet, Microsoft.CodeDom.Providers.DotNetCompilerPlatformque foi removido:

  1. <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" /> do arquivo 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>

No system.codedomnó, você pode ver por que estava trazendo roslyn:compilerOptions="/langversion:6


1
Tudo o que eu precisava fazer era desinstalar o pacote NuGet "Microsoft.CodeDom.Providers.DotNetCompilerPlatform" e isso foi resolvido por mim (meu projeto é o .NET 4.5.2).
— BlueSky

1
Isso funcionou para mim. Você também deseja remover o Microsoft.Net.Compilers, pois não há motivo para manter essa dependência adicional.
— Always Learning

4

Exclua a pasta Bin no seu gerenciador de soluções e crie a solução novamente. Isso resolveria o problema


Obrigado! Isso funcionou para mim também. Além de que eu atualizei todos os meus pacotes NuGet
— Andre Kraemer

4

Eu tive o mesmo problema ao instalar meu aplicativo no servidor quando tudo funcionou perfeitamente no localhost.

Nenhuma dessas soluções funcionou, eu sempre tive o mesmo erro:

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

Acabei fazendo isso:

  • no meu projeto de instalação, clique com o botão direito, veja> sistema de arquivos
  • crie uma bin/roslynpasta
  • selecione adicionar> arquivos e adicione todos os arquivos de packages\Microsoft.Net.Compilers.1.3.2\tools

Isso resolveu meu problema.


4

Reinicie o Windows.

Esta é a única solução que funcionou para mim depois de tentar reconstruir, excluir o conteúdo bine reconstruir, reiniciar o Visual Studio.

É mais um exemplo de quão terrível são as ferramentas de compilação C # / .NET.

Acho que (depois de ler muitas das respostas), a conclusão geral é que a causa e a solução desse problema dependem muito da configuração e do projeto; portanto, se uma resposta não funcionar, tente outra. Tente soluções não-intrusivas / destrutivas, como reiniciar o Visual Studio, reiniciar, reconstruir etc. PRIMEIRO, antes de mexer nos pacotes NuGet ou reinstalar as ferramentas de desenvolvimento. Boa sorte!

(NOTA: usando o Visual Studio 2019, e o arquivo do projeto foi criado originalmente no Visual Studio 2015. Talvez isso ajude alguém a investigar o problema)

(EDIT: isso pode ser causado por não reiniciar depois de instalar / modificar a instalação do Visual Studio ou atualizar o Visual Studio quando o instalador solicitar a reinicialização?)


3

Eu tenho um projeto web sem o arquivo csproj e as soluções mencionadas aqui não funcionaram para mim.

Alterar a estrutura .NET de destino, reinstalar packages ( Update-Package -reinstall) e criar o projeto funcionaram para mim. Você pode até mudar a estrutura de destino novamente após esta operação (depois de reinstalar os pacotes nuget novamente depois).


Este é um "projeto de site". Eu usei este comando para reinstalar apenas um pacote:update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -reinstall
— GarDavis
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.