Publicar sitio web sin roslyn


91

Estoy tratando de crear una aplicación web usando Visual Studio 2015 y .NET 4.5.1. Cuando publico el sitio web, Visual Studio crea la carpeta llamada roslyn.

ingrese la descripción de la imagen aquí

Sé que se usa para compilar código sobre la marcha, pero desafortunadamente mi proveedor de alojamiento no me permite ejecutar el compilador en su servidor.

¿Cómo publicar el sitio web sin una roslynversión anterior de Visual Studio?

EDITAR: Recibí este error al intentar acceder a mi sitio web.

ingrese la descripción de la imagen aquí

Parece que IIS intenta ejecutarse, roslyn\csc.exepero mi cuenta de usuario no tiene permiso para hacerlo. Con la versión anterior de Visual Studio, este error no aparece.


Además, Roslyn es solo un conjunto de archivos DLL. El anfitrión no puede saber ni importarle lo que hacen.
SLaks

3
@Slaks IIS intentando ejecutar csc.exe. Ver editar.
Niyoko Yuliawan

Si está utilizando Plesk, puede deshabilitar el 'Grupo de aplicaciones IIS dedicado para sus sitios web', ¡entonces ni siquiera necesita eliminar esos paquetes!
Vahid Amiri

Respuestas:


183

Acabo de enfrentar el mismo problema. Cuando crea un nuevo proyecto web, dos paquetes nuget se agregan automáticamente a su proyecto. Si los elimina, su problema debería resolverse. Los nombres de los paquetes son: " Microsoft.CodeDom.Providers.DotNetCompilerPlatform " y " Microsoft.Net.Compilers ".


Esto funcionó y es apto con proveedores de alojamiento web de terceros. Tiene dos consultas sobre esto: 1) ¿Puede la eliminación de estos paquetes de Nuget afectar el producto de alguna manera? 2) ¿Se pueden eliminar estos paquetes de la plantilla del proyecto para evitar este ejercicio cada vez?
nura

1) No afecta el flujo de trabajo o la lógica del producto; pero la URL ( itorian.com/2015/09/roslyn-cscexe-and-vbcexe-deployment-on.html ), que es proporcionada por @ Ajay2707, dice que este paquete afecta el tiempo de carga de la página. 2) No sé cómo puedes hacer esto, pero si puedes, no habrá ningún problema.
Kemal Kefeli

3
Se eliminaron ambos paquetes de NuGet. Declaración de configuración eliminada. Aún así, esta carpeta se está creando durante la compilación o publicación. El único paquete NuGet que usa mi aplicación es "Newtonsoft.Json". ¿Necesito desinstalarlo también?
Ranjan Kumar

8
Tenga en cuenta que la eliminación de estos paquetes interrumpirá el uso de las funciones de C # 6. Esto podría resolverse desmarcando "" Permitir que el sitio precompilado sea actualizable "que precompila las vistas, etc.
Rutix

9
@RanjanKumar: Abra su archivo csproj en un editor de texto y elimine los nodos correspondientes a los paquetes NuGet descritos en la respuesta de Kemal. Esto puede incluir Importnodos, Targetnodos (GarantizarNugetPackageBuildImports) y Referencenodos. También elimine el <system.codedom>nodo de su web.config.
Brian

16

Tuve el mismo problema. Seguí los pasos desde aquí . Básicamente:

  1. Desinstalar el paquete

    Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform <Your Web API project name>
    
  2. En la configuración de tu perfil de publicación, desmarca "Permitir que el sitio precompilado sea actualizable". Puede encontrar esto en Configuración> Precompilar durante la publicación> configurar


7
De esta forma, no puede usar las funciones de C # 6 en las vistas.
RokX


2

Después de innumerables esfuerzos .... y según este sitio web . Encuentro que puede usar /p:UseWPP_CopyWebApplication=true /p:PipelineDependsOnBuild=falseen MSBuild para transformar web.config, esto también incluye el compilador roslyn en la compilación. El resultado es el mismo que obtiene al publicar en Visual Studio en el sistema de archivos


No puedo entender el artículo en el enlace del sitio web, pero seguir su consejo de agregar esos parámetros de compilación en MSBuild funciona. Como dijo, el resultado es el mismo que cuando publicamos en el sistema de archivos. Gracias
Bruce

2

Hay un error abierto en el repositorio de roslyn sobre este problema.

En mi caso, todo lo que tuve que hacer fue degradar el dll Microsoft.CodeDom.Providers.DotNetCompilerPlatformde la versión 1.0.6a 1.0.5.


0

Tuve el mismo problema en septiembre de 2016 cuando asumí el control de un programa ASP.NET existente. Descubrí que había varias versiones de los dos paquetes de compiladores mencionados por Kemal instalados en diferentes proyectos de la solución.

Así que en primer lugar actualicé para que fueran iguales. VS no le dice que hay actualizaciones disponibles en este escenario (¿o tal vez me las perdí?)

Luego tuve que reiniciar VS2015 para que los paquetes se limpiaran correctamente.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.