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.
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.
.csproj
arquivo.Respostas:
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:
fonte
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:
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.fonte
Sua compilação está tentando encontrar
\bin\roslyn\csc.exe
porque os seguintes pacotes foram adicionados ao seu projeto. Basta revisar seupackages.config
arquivo, você pode ter os dois lá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
2. Depois de fazer isso, seu arquivo web.config deve ser atualizado automaticamente. Caso contrário, procure o código abaixo no
web.config
arquivo e, se for encontrado, exclua este trecho de código.fonte
Uma limpeza e reconstrução funcionou para mim!
fonte
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".
Aqui está uma maneira mais MSBuild de fazer isso.
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.
fonte
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.
fonte
Eu segui esses passos e funcionou perfeitamente
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
fonte
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)
fonte
roslyn
pasta é criada no meu caminho de saída. Também não vejo nenhuma referência "roslyn" no meu csproj. Ele poderia ser queTarget 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.fonte
Ctrl C
quando estava no meio de um galhogit
e ele estragou meu repositório.git reset --hard
não funcionou, então eugit clean -xdf
e tive que reconstruir o projeto. No entanto, encontrei esse erro, então simplesmente limpei e reconstruí o projeto novamente e ele funcionou para mim.Você precisa instalar o Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix, foi criado especialmente para esse erro
fonte
Isso reinstala todas as dependências e arquivos do pacote (como csc.exe)
fonte
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.
fonte
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
fonte
Este é um problema conhecido no Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6. O downgrade para 1.0.5 corrigiu isso para mim.
fonte
Para o VS 2019, remova completamente o seguinte nó:
fonte
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.
fonte
No meu caso, tive um problema no Jenkins ao tentar implantá-lo no Octopus com o seguinte erro:
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 usandoMicrosoft.Net.Compilers
era 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.Compilers
foi adicionado automaticamente.Solução
Minha solução foi desinstalar a seguir do nosso componente interno por (seguindo a resposta @malikKhalil)
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.
fonte
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.
fonte
Eu também estava tendo o mesmo problema ao executar o projeto. Aqui estão os passos que eu segui.
Desta vez, não vi o mesmo erro. Isso funciona como esperado.
fonte
A atualização
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
da 1.0.0 para a 1.0.1 corrigiu isso para mim.fonte
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
fonte
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 executarMas uma solução alternativa (que automaticamente e silenciosamente recria seus pacotes, se estiverem ausentes) é remover um atributo do
Web.config
arquivo do seu projeto .(
Web.config
está no mesmo diretório que o seu.csproj
arquivo.)Abra o
Web.config
arquivo em um editor de texto (ou dentro do Visual Studio).- Na tag
configuration
>system.codedom
>compilers
>compiler language="c#;cs;csharp"
, remover completamente otype
atributo.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.Tente substituir
http://localhost:64195
no seu navegador porhttp://localhost:64195/api/products
.A API da web agora é exibida como deveria:
Como provocação, tentei remover o
package
diretó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 )
fonte
No meu caso, apenas excluir tudo dentro da pasta bin e recompilar fez todo o trabalho para mim.
fonte
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 ):
fonte
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, poisAppHarbor
cria 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
.csproj
arquivo, logo após o bloco xml<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">...</Target>
Referência: https://support.appharbor.com/discussions/problems/78633-cant-build-aspnet-mvc-project-generated-from-vstudio-2015-enterprise
fonte
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.DotNetCompilerPlatform
que foi removido:<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" />
do arquivo packages.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>
No
system.codedom
nó, você pode ver por que estava trazendo roslyn:compilerOptions="/langversion:6
fonte
Exclua a pasta Bin no seu gerenciador de soluções e crie a solução novamente. Isso resolveria o problema
fonte
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:
Acabei fazendo isso:
bin/roslyn
pastapackages\Microsoft.Net.Compilers.1.3.2\tools
Isso resolveu meu problema.
fonte
Reinicie o Windows.
Esta é a única solução que funcionou para mim depois de tentar reconstruir, excluir o conteúdo
bin
e 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?)
fonte
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).fonte
update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -reinstall