Publique o site sem roslyn

91

Estou tentando criar um aplicativo da web usando Visual Studio 2015 e .NET 4.5.1. Quando eu publico o site, o Visual Studio cria uma pasta chamada roslyn.

insira a descrição da imagem aqui

Eu sei que é usado para compilar código em tempo real, mas infelizmente meu provedor de hospedagem não permite que eu execute o compilador em seu servidor.

Como publicar o site sem roslyngostar da versão anterior do Visual Studio?

EDIT: Recebi este erro ao tentar acessar meu site.

insira a descrição da imagem aqui

Parece que o IIS está tentando executar, roslyn\csc.exemas minha conta de usuário não tem permissão para fazer isso. Com a versão anterior do Visual Studio, esse erro não aparece.

Niyoko Yuliawan
fonte
Além disso, Roslyn é apenas um conjunto de DLLs. O anfitrião não pode saber ou se importar com o que eles fazem.
SLaks
3
@Slaks IIS tentando executar csc.exe. Veja editar.
Niyoko Yuliawan
Se estiver usando o Plesk, você pode desabilitar o 'Pool de aplicativos IIS dedicado para seus sites', então você nem precisa remover esses pacotes!
Vahid Amiri

Respostas:

183

Acabei de enfrentar o mesmo problema. Quando você cria um novo projeto da web, dois pacotes nuget são adicionados automaticamente ao seu projeto. Se você removê-los, seu problema estará resolvido. Os nomes dos pacotes são: " Microsoft.CodeDom.Providers.DotNetCompilerPlatform " e " Microsoft.Net.Compilers ".

Kemal Kefeli
fonte
Isso funcionou e é adequado com provedores de hospedagem na web de terceiros. Faça duas perguntas sobre isso: 1) A remoção desses pacotes Nuget pode afetar o produto de alguma forma? 2) Esses pacotes podem ser removidos do próprio modelo de projeto para evitar este exercício sempre?
nura
1) Não há nenhum efeito no fluxo de trabalho ou lógica do produto; mas o url ( itorian.com/2015/09/roslyn-cscexe-and-vbcexe-deployment-on.html ), que é fornecido por @ Ajay2707, diz que este pacote afeta o tempo de carregamento da página. 2) Não sei como você pode fazer isso, mas se você puder, não haverá problema.
Kemal Kefeli
3
Removidos os dois pacotes NuGet. Declaração de configuração removida. Ainda assim, esta pasta está sendo criada durante a compilação ou publicação. Apenas o pacote NuGet que meu aplicativo está usando é "Newtonsoft.Json". Eu preciso desinstalá-lo também?
Ranjan Kumar
8
Lembre-se de que a remoção desses pacotes interromperá o uso dos recursos do C # 6. Isso pode ser resolvido desmarcando "" Permitir que o site pré-compilado seja atualizável ", que pré-compila as visualizações, etc.
Rutix
9
@RanjanKumar: Abra seu arquivo csproj em um editor de texto e remova os nós correspondentes aos pacotes NuGet descritos na resposta de Kemal. Isso pode incluir Importnós, Targetnós (EnsureNugetPackageBuildImports) e Referencenós. Remova também o <system.codedom>nó do seu web.config.
Brian
16

Eu tive o mesmo problema. Siga as etapas a partir daqui . Basicamente:

  1. Desinstale o pacote

    Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform <Your Web API project name>
    
  2. Em suas configurações de perfil de publicação, desmarque "Permitir que o site pré-compilado seja atualizável". Você pode encontrar isso em Configurações> Pré-compilar durante a publicação> configurar

Midas
fonte
7
Dessa forma, você não pode usar recursos do C # 6 em visualizações.
RokX de
2

Depois de pesquisar o mesmo problema que enfrento, acabei de vim aqui. Eu li a resposta acima que está certa.

Eu dou a resposta, por causa de Aqui está um bom artigo para explicar:

  1. Por que o código de publicação tem este exe, bem como ambiente de desenvolvimento?
  2. Qual é o benefício e como remover?

Este é também o artigo muito bom, sobre a história deste exe

Ajay2707
fonte
2

Depois de inúmeros esforços .... e de acordo com este site . Acho que você pode usar /p:UseWPP_CopyWebApplication=true /p:PipelineDependsOnBuild=falseno MSBuild para transformar o web.config, isso também inclui o compilador roslyn na compilação. A saída é a mesma que você obtém publicando no Visual Studio no sistema de arquivos

code4j
fonte
Não consigo entender o artigo no link do site, mas seguir seu conselho para adicionar esses parâmetros de compilação no MSBuild funciona. Como você disse, a saída é a mesma de quando publicamos no sistema de arquivos. Obrigado
Bruce
2

Há um bug aberto no repositório roslyn sobre esse problema.

No meu caso, tudo que precisei fazer foi fazer o downgrade da dll Microsoft.CodeDom.Providers.DotNetCompilerPlatformde versão 1.0.6para 1.0.5.

Felipe Miosso
fonte
0

Tive o mesmo problema em setembro de 2016, quando assumi um programa ASP.NET existente. Descobri que havia várias versões dos dois pacotes de compiladores mencionados por Kemal instaladas em diferentes projetos da solução.

Então, primeiro eu atualizei para mantê-los iguais. O VS não informa que as atualizações estão disponíveis neste cenário (ou talvez eu as perdi?)

Em seguida, reiniciei o VS2015 para que os pacotes fossem limpos corretamente.

Rob Von Nesselrode
fonte