No se pudo encontrar una parte de la ruta ... bin \ roslyn \ csc.exe

813

Estoy tratando de ejecutar el proyecto Asp.net MVC recuperado del control de origen TFS. He agregado todas las referencias de ensamblaje y puedo compilar y compilar correctamente sin ningún error o advertencia.

Pero me sale el siguiente error en el navegador:

No se pudo encontrar una parte de la ruta 'C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe'.

Aquí hay una captura de pantalla completa de la página de error.

ingrese la descripción de la imagen aquí

Después de unos días de investigación, entendí que Roslyn es una plataforma compiladora .Net que ofrece funciones avanzadas de compilación. Sin embargo, no entiendo por qué mi compilación está tratando de encontrar \ bin \ roslyn \ csc.exe porque no configuré nada relacionado con Roslyn ni tengo la intención de usar Roslyn en mi proyecto.

Eyad
fuente
10
¿Alguien puede explicar por qué esto es necesario como parte de la ejecución de una aplicación ASP.NET compilada? ¿Para qué sirve csc.exe?
gregmac
1
Creo que esto explica la participación de Roslyn: blogs.msdn.microsoft.com/webdev/2014/05/12/…
andy250
44
carpeta de Roslyn no estaba siendo copiado en la carpeta bin i fijo mediante la instalación Instalar el siguiente Paquete Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Abdullah Tahan
12
Reinstalar Microsoft.CodeDom.Providers.DotNetCompilerPlatform resolvió mi problema.
SurenSaluka
44
Estaba teniendo esto después de abrir mi proyecto en VS 2019. Anteriormente funcionaba en VS 2017. Descubrí que simplemente degradar Microsoft.CodeDom.Providers.DotNetCompilerPlatform a cualquier versión anterior y luego volver a la última versión solucionó el problema. Se corrigieron algunos problemas en mi .csprojarchivo.
Neo

Respuestas:

436

El problema con las plantillas VS2015 predeterminadas es que el compilador en realidad no se copia en el directorio tfr \ bin \ roslyn \, sino más bien en el directorio {outdir} \ roslyn \

Agregue este código en su archivo .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>
Mitchell
fuente
99
Esto no resuelve mi problema. Ahora obtengo 'No se pudo encontrar el archivo' C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe ' . Tenga en cuenta que cuando creo un nuevo proyecto MVC en VS2015 no veo la configuración mencionada en .csproj y funciona perfectamente bien en el navegador
Eyad
44
Gracias. Ahora puedo construir y ejecutar el proyecto en el navegador después de descargar el directorio de Roslyn y colocarlo en la carpeta / bin. No puse el PstBuildEvent mencionado anteriormente y todavía funciona. Tal vez desee editar su respuesta anterior y mencionar la necesidad de colocar manualmente los archivos de Roslyn y reflejar mejor la solución.
Eyad
2
Bueno, en una situación normal; debe tener el compilador dentro de su carpeta $ (OutDir) roslyn *. *, por lo que este script copiará el compilador a la carpeta de su proyecto. Aparentemente, su instalación de vs2015 no incluyó el compilador.
Mitchell
99
Encontré que actualizar Microsoft.CodeDom.Providers.DotNetCompilerPlatform a 1.0.8 y Microsoft.Net.Compilers 2.6.1 me ayudaron mucho. No necesitaba agregar este objetivo adicional. Parece que se agregó algo similar en una versión posterior de las herramientas: github.com/aspnet/RoslynCodeDomProvider/commit/…
Ian Robertson
55
He actualizado la versión de Microsoft.Net.Compilers a la versión 2.10.0 de Nuget y ha sido la solución para mí. Estoy usando targetFramework = "4.6.2"
juanytuweb
1163

TL; DR

ejecutar esto en la consola del Administrador de paquetes:

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

Más información

Este problema no está relacionado con Visual Studio en sí, por lo que las respuestas que sugieren agregar pasos de compilación para copiar archivos son más bien una solución alternativa. Lo mismo con agregar binarios del compilador manualmente al proyecto.

El compilador de Roslyn proviene de un paquete NuGet y hay / hubo un error en algunas versiones de ese paquete (no sé exactamente cuáles). La solución es reinstalar / actualizar ese paquete a una versión libre de errores. Originalmente antes de escribir la respuesta en 2015, la arreglé instalando los siguientes paquetes en versiones específicas:

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

Luego busqué en .csproj y me aseguré de que las rutas a los paquetes sean correctas (en mi caso ... \ .. \ packages \ *. *) Dentro de las etiquetas <ImportProject>en la parte superior y <Target>con el nombre "GuaranteeNuGetPackageBuildImports" en la parte inferior. Esto está en MVC 5 y .NET Framework 4.5.2.

andy250
fuente
11
Este fue mi problema: la carpeta bin / roslyn está allí cuando se crea un proyecto, sin embargo, si lo elimina o, como el control de origen, no se copia, no se reconstruye. Creo que hay un pequeño problema de "sincronización" con las versiones, una vez que se instala 1.0.1 y se actualiza el archivo Importar en el proyecto para corregir la versión, una compilación copiará automáticamente la carpeta Roslyn, sin necesidad de ninguna de esas publicaciones construir comandos
Jester
16
Estoy bastante seguro de que esta es la mejor solución ... probar esto yo mismo con un paquete de actualización -reinstalar -projectname myprojectname
cr1pto
55
Después de hacer todo esto, nada cambió para mi proyecto. La carpeta bin todavía está aplanada.
brianary
8
Una nota: la versión 1.0.3 del paquete Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget funciona para mí, pero la versión 1.0.6 causa el error en esta pregunta.
Daniel Neel
55
1.0.6 tiene un error: github.com/aspnet/RoslynCodeDomProvider/issues/13
akatakritos
176

Su compilación está intentando encontrar \bin\roslyn\csc.exeporque se han agregado los siguientes paquetes a su proyecto. Solo revise su packages.configarchivo, puede tener ambos allí

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

Qué es Roslyn y quién los agregó (paquetes) en el proyecto: si está usando .net Framework 4.5.2 para crear proyectos usando VS2015, es posible que haya notado que las plantillas de proyecto usan Roslyn de forma predeterminada. En realidad, Roslyn es uno de los compiladores de código abierto para lenguajes .NET de Microsoft.

¿Por qué deberíamos eliminar Roslyn? Si su proyecto tiene referencias de Roslyn y está interesado en implementarlo sin servidor, obtendrá errores no deseados en el sitio web, ya que muchos proveedores de alojamiento todavía no han actualizado sus servidores y, por lo tanto, no son compatibles con Roslyn. Para resolver este problema, deberá eliminar el compilador de Roslyn de la plantilla del proyecto.

Si no está interesado en usar Roslyn, siga los pasos a continuación para eliminarlo

1. Elimine los paquetes NuGet, use los siguientes comandos de la Consola de paquetes Nuget

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

2. Después de hacer esto, su archivo web.config debería actualizarse automáticamente. En caso de que no sea así, busque el siguiente código en el web.configarchivo y, si lo encuentra, elimine este fragmento 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>
Malik Khalil
fuente
28
Esto no es realmente una solución si realmente desea utilizar el nuevo compilador y las nuevas funciones.
Matti Virkkunen
14
Estás abogando contra el futuro.
cchamberlain
2
@cchamberlain ¿por qué es el futuro? Simplemente creo que debería ser fácil de usar, pero parece que muchas personas tienen problemas con él.
Alisson
1
@Alisson: Roslyn es la dirección en la que van las cosas. Contiene características de lenguaje más nuevas, es más eficiente, multiplataforma y de código abierto. Salió después de las otras herramientas, de ahí el futuro. Nada dice que necesite usarlo, la mayoría de las actualizaciones tienen algún costo. Consulte "¿Por qué la compilación de Roslyn en ASP.NET?" sección: blogs.msdn.microsoft.com/webdev/2014/05/12/…
cchamberlain
1
Si desea publicar el proyecto MVC en el alojamiento de Windows compartido de GoDaddy, esta es la respuesta. GoDaddy no ejecuta ejecutables como csc.exe
Jeson Martajaya
141

¡Una limpieza y reconstrucción funcionó para mí!

pipedreambomb
fuente
44
No creo que se requiera la limpieza. De acuerdo con esta discusión sobre el problema, una reconstrucción que no sea una construcción regular siempre devolverá el archivo roslyn. github.com/dotnet/roslyn/issues/15556
leemicw
También simplemente ejecuté Build> Rebuild Solution y el error desapareció.
Matt Merrill
La reconstrucción se resolvió por mí, noté esto en la salidaCopying 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 el
12
Simplemente reconstruir no funcionó para mí. Después de Limpiar + Reconstruir, el error desapareció.
Bruno Miquelin
2
DotNetCompilerPlatform 1.0.3, Microsoft.Net.Compilers 1.3.2, VS Pro 2017 15.9.4 aquí. Una limpieza / reconstrucción no funcionó para mí, incluso antes y después de reiniciar Visual Studio. Finalmente, un Build> Batch Build ...> Rebuild All hizo el truco. Debe haber susurrado el dulce-nada correcto para que VS vea que le faltaba el directorio bin / roslyn en la salida.
Johann
59

Aquí hay una forma más MSBuild de hacer esto.

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

Pero noto que los archivos roslyn también están en mi directorio bin (no en una carpeta). Sin embargo, la aplicación parece funcionar.

Rob Cannon
fuente
44
Puede colocarlo en cualquier parte de su archivo .csproj, al mismo nivel que otra etiqueta <Target>. Normalmente lo pongo hacia el fondo.
Rob Cannon
Esta realmente debería ser la respuesta aceptada. Puede verificar esto en la fuente y el próximo idiota pobre que tira de su repositorio no tendrá que pasar por el mismo problema.
Andrew Clear
37

Como se señaló en un problema en el proyecto Roslyn en GitHub , una solución (que funcionó para mí) es simplemente descargar y volver a cargar el proyecto en Visual Studio.

La carpeta "bin \ roslyn" no se creó en la compilación o reconstrucción hasta que volví a cargar el proyecto.

Christian Davén
fuente
Gracias, funcionó para mí. El problema en el repositorio de dotnet se abrió en 2016 y todavía tenemos este problema en Visual Studio 2019. ¡No puedo creer que sea real!
Felipe Oriani
26

Seguí estos pasos y funcionó perfectamente

  • Eliminar todas las carpetas bin y obj
  • Solución limpia y reconstrucción
  • Ejecute este comando en powershell

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

Masoud Darvishian
fuente
22

Después de probar todas las soluciones sin cigarro, lo arreglé actualizando este paquete Nuget en Visual Studios:

Microsoft.CodeDom.Providers.DotNetCompilerPlatform

El mío fue de 1.0.0 a 2.0.0 como referencia (el error ya no se muestra)

josh.thomson
fuente
3
Esto fue para mí también. Incluso 2.0.0 era demasiado bajo para mi proyecto, exigía 2.0.1.
yesman
3
Esto lo resolvió para mí. Bajé de categoría lo que debe haber solucionado el problema y luego volví a actualizar a la última.
Daniel Jackson
1
Yo también hice esto. Ahora la roslyncarpeta está creada en mi ruta de salida. Tampoco veo ninguna referencia de "roslyn" en mi csproj. Se podría ser que Target Name="CopyRoslyn...es una cosa VS2015 y no en necesario (la versión) 2017 tengo. Vale la pena señalar: desde que actualicé DotnetCompilerPlatform antes de jugar agregando un objetivo de copia (el que mencioné) tengo un csproj más limpio.
LosManos
1
Este me acaba de pasar. Esta publicación es un salvavidas. ¡Tengo este mismo mensaje de error repetidamente y siempre parece ser una razón completamente diferente!
Brian Knoblauch el
19
  1. Solución limpia
  2. Reconstruir solución, estos dos pasos funcionaron para mí.
nischa
fuente
Gracias, esto también funcionó para mí.
Joey Phillips
1
Trabajos. Accidentalmente presioné Ctrl Ccuando estaba en medio de revisar una rama gity arruinó mi repositorio. git reset --hardno funcionó, así que git clean -xdftuve que reconstruir el proyecto. Sin embargo, me encontré con este error, así que simplemente limpié y reconstruí el proyecto nuevamente y funcionó para mí.
Paul Carlton
15

NuGet Package Manager

Debe instalar Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix, fue creado especialmente para ese error

Adrian Berca
fuente
Esto no funcionó: sospecho que el paquete no es realmente para este propósito exacto.
Drew Miller el
Probé con VS 2017 y funciona bien, podría ser un problema con otras versiones.
Juan Acosta
11
No estoy instalando paquetes aleatorios de una persona aleatoria con 'dsx' como apodo. Es decir gran seguridad sin ...
Mateusz
1
@Mateusz o uno que solucione la estructura de mi carpeta que no sea APS.NET [sic]
Eliasar
14
  • Haga clic derecho en su proyecto y seleccione Administrar paquetes Nuget
  • Busque "Microsoft.CodeDom.Providers.DotNetCompilerPlatform"
  • Simplemente actualice a una versión anterior o anterior (no importa cuál), y luego actualice nuevamente a su versión original.

Esto reinstala todas las dependencias y archivos del paquete (como csc.exe)

Nuget - DotNetCompilerPlatform

Bojan
fuente
¡Esto me lo arregló! ¡Gracias!
Mason
11

Entonces, la respuesta de Rob Cannon esencialmente funcionó para mí, pero tuve que ajustar algunas opciones. Específicamente, tuve que eliminar la condición en el destino, así como cambiar el atributo Incluir, ya que $ CscToolPath estaba vacío cuando el proyecto se estaba construyendo en nuestro servidor de compilación. Curiosamente, $ CscToolPath NO estaba vacío cuando se ejecutaba 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>
jonnybot
fuente
1
El comportamiento es aún peor. Localmente, si va a la carpeta de su paquete y elimina las dos carpetas Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.nn y crea su código, entonces $ CscToolPath estará vacío. Si construyes una segunda vez, entonces no estará vacío. El problema ocurre todo el tiempo en su servidor de compilación, porque siempre se considera como una "primera compilación". Su código funciona perfectamente, pero si actualiza el paquete Microsoft.Net.Compilers , deberá actualizar el .csproj . Gracias.
Julien D.
3
Tenga en cuenta que esta solución fallará (o debe ajustarse) si cambia la versión de Microsoft.Net.Compilers.
JanDotNet
Actualicé Microsoft.CodeDom.Providers.DotNetCompilerPlatform y luego pude continuar.
iowatiger08
10

La actualización de paquetes nuget funcionó para mí Haga clic derecho en la solución> Administrar paquetes NuGet para la solución y actualice todos los paquetes y especialmente: Microsoft.Net.Compilers y Microsoft.CodeDom.Providers.DotNetCompilerPlatform

hichamkazan
fuente
Esto funcionó para mí esta vez. El error que falta Roslyn / csc.exe aparece constantemente y la solución es diferente con bastante frecuencia ...
Brian Knoblauch
10

Este es un problema conocido con Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6. La degradación a 1.0.5 solucionó esto para mí.

jrummell
fuente
Esto es correcto. Me encontré con este problema con la versión 1.0.6 solo cuando publicaba en Azure. La degradación a 1.0.5 funciona
Augusto Barreto
Bajó de 2.0.0 a 1.0.5 y funcionó. Sin embargo, estaba comiendo un sándwich de pavo en ese momento, que probablemente fue en parte responsable de la solución. Imagínate.
barneymc
10

Para VS 2019, elimine completamente el siguiente nodo:

<system.codedom>
</system.codedom>
Shadi Namrouti
fuente
9

Por un comentario de Daniel Neel arriba:

la versión 1.0.3 del paquete Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget funciona para mí, pero la versión 1.0.6 causa el error en esta pregunta

La degradación a 1.0.3 resolvió este problema para mí.

Jason Coyne
fuente
3
1.0.6 tiene un error: github.com/aspnet/RoslynCodeDomProvider/issues/13
akatakritos
@akatakritos esto ayudó. Estuve buscando por horas. gracias a los dos.
erincerol
2
1.0.7 todavía se ve afectado en ciertos escenarios github.com/aspnet/RoslynCodeDomProvider/issues/17
altso
1
1.0.5 es la versión más reciente que funcionó para mí (1.0.6 y 1.0.7 están generando el error)
Patrick
Igual, tenía 1.0.7 y no funcionaría. 1.0.3 funciona. No he intentado nada más alto, ya que acabo de desperdiciar la última hora de mi vida con este problema y ya no me estoy metiendo con eso, ¡ahora funciona!
Philip Stratford
9

En mi caso, tuve un problema en Jenkins cuando trató de implementarlo en Octopus con el siguiente error:

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

Porque

Después de pasar un tiempo, estaba usando un componente interno desarrollado que estaba usando Microsoft.Net.Compilers. La razón por la que el componente interno estaba usando Microsoft.Net.Compilersera para superar este problema ( C #: arrojar una compilación de expresión no válida ) y se resolvió de esta manera ( ¿Cómo usar C # 7 con Visual Studio 2015? ). Esto da como resultado que, cuando instalé el componente en el programa principal, Microsoft.Net.Compilersse agregó automáticamente.

Solución

Mi solución fue desinstalar el seguimiento de nuestro componente interno (siguiendo la respuesta de @malikKhalil)

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

Y eligió el compilador C # 7 en Jenkins en lugar de C # 6 y reconstruir, esto es para garantizar que todo funcione y se compile correctamente.

Finalmente, en mi programa principal intenté actualizar mi componente interno. Y todo que construir de nuevo. Se ha construido sin problemas ni problemas.

maytham-ɯɐɥʇʎɐɯ
fuente
8

En mi caso, solo necesitaba ir al directorio bin en Visual Studio Solution Explorer (proyecto de aplicación web) e incluir el proyecto roslyn directamente. Al hacer clic derecho en la carpeta y seleccionar Incluir en el proyecto. Y vuelva a comprobar la solución para activar el proceso de compilación.

La carpeta roslyn no se incluyó por defecto.

Martijn van Halen
fuente
8

También estaba teniendo el mismo problema mientras ejecutaba el proyecto. Aquí están los pasos que seguí.

  1. Haga clic derecho en la solución
  2. seleccione Solución limpia
  3. Después de la limpieza exitosa, construya nuevamente su proyecto
  4. Ejecute el proyecto nuevamente

Esta vez no vi el mismo error. Esto funciona como se esperaba.

Narendra
fuente
Los colegas informaron que la actualización del paquete NuGet desde la consola funciona, pero esto también funciona sin ejecutar ningún comando. Mi respuesta elegida.
tsemer el
7

La actualización Microsoft.CodeDom.Providers.DotNetCompilerPlatformde 1.0.0 a 1.0.1 solucionó esto para mí.

Ben
fuente
6

Abra el archivo del proyecto y elimine todas las referencias con Import Project = ".. \ packages \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 ....

Abra web.config y elimine todos los atributos de compiladores system.codedom

usuario6326076
fuente
6

Como ya se ha señalado por /programming/32780315#34391473 , la solución rápida es utilizar el gestor de paquetes, Tools> Nuget Package Manager> Package Manager Console, para funcionar

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

Consola de administrador de paquetes: cómo abrir

Pero una solución alternativa (que recrea de forma automática y silenciosa sus paquetes si faltan) es eliminar un atributo del Web.configarchivo de su proyecto .
( Web.configestá en el mismo directorio que su.csproj archivo).

Abra el Web.configarchivo en un editor de texto (o dentro de Visual Studio).
- En la etiqueta configuration> system.codedom> compilers> compiler language="c#;cs;csharp", eliminar completamente el 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>

En resumen, elimine la línea que comienza con type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.

(Presumiblemente, la misma solución funciona tanto para Visual Basic como para Csharp, pero no lo he probado).

Visual Studio se encargará del resto. No más Server Error in '/' Application.

En el código de ejemplo que proporcioné en el archivo zip anterior, ahora obtendrá HTTP Error 403 cuando presione Ctrl+ F5.

Error HTTP 403.14 - Prohibido

Intente reemplazar http://localhost:64195en su navegador web con http://localhost:64195/api/products.
La API web ahora se muestra como debería:

Una API web que contiene productos

Como provocación, intenté eliminar todo el packagedirectorio de mi solución de Visual Studio.
Se recreó automática y silenciosamente tan pronto como la (re) construí.


Por último, pero no menos importante, aquí hay un código que reproduce el error: http://schulze.000webhostapp.com/vs/SrvrErr-reproduce.zip (Originalmente de https://github.com/aspnet/AspNetDocs/tree/master/aspnet / web-api / overview / advanced / calling-a-web-api-from-a-net-client / sample / server / ProductsApp )

Error del Servidor

Henke
fuente
6

En mi caso, simplemente eliminar todo dentro de la carpeta bin y volver a compilar hizo todo el trabajo por mí.

Juan Martí
fuente
2
Creo que esto es más simple y efectivo. Por lo general, aparece este error después de clonar un proyecto de un repositorio en una nueva computadora.
Jonathan Ortega
Después de intentar esto, obtuve 403 Prohibido de IIS Express cuando se ejecuta en el depurador. Reiniciar Visual Studio tampoco ayudó, pero reiniciar Windows sí.
Florian Winter
5

Si estaba agregando ASPNETCOMPILER para compilar sus vistas de Razor en MVC, como en esta pregunta de StackOverflow , entonces cambie PhysicalPath para colocar donde se encuentra el paquete Nuget de Roslyn (generalmente señalado a través de la variable $ CscToolPath ):

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

Anrijs Vītoliņš
fuente
5

El problema con las plantillas VS2015 predeterminadas es que el compilador en realidad no se copia en el {outdir}_PublishedWebsites\tfr\bin\roslyn\directorio, sino en el {outdir}\roslyn\directorio. Es probable que esto sea diferente de su entorno local, ya que AppHarborcrea aplicaciones utilizando un directorio de salida en lugar de crear la solución "en el lugar".

Para solucionarlo, agregue lo siguiente hacia el final del .csprojarchivo justo después del bloque 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>

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

Korayem
fuente
1
La opción / d copia solo los archivos más nuevos (significa "fecha"). Tenga en cuenta la implementación en la nube / azul donde el tiempo podría estar retrasado / delante de la hora local.
Max
4

En mi caso, similar a Basim, había un paquete NuGet que le decía al compilador que necesitábamos C # 6, lo cual no era necesario.

Tuvimos que eliminar el paquete NuGet Microsoft.CodeDom.Providers.DotNetCompilerPlatformque luego eliminó:

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

En el system.codedomnodo, puede ver por qué traía a Roslyn:compilerOptions="/langversion:6

Mark C.
fuente
1
Todo lo que tenía que hacer era desinstalar el paquete NuGet "Microsoft.CodeDom.Providers.DotNetCompilerPlatform" y eso lo resolvió por mí (mi proyecto apunta a .NET 4.5.2).
BlueSky
1
Esto funcionó para mí. También querrá eliminar Microsoft.Net.Compilers ya que no hay razón para mantener esta dependencia adicional.
Siempre aprendiendo el
4

Elimine la carpeta Bin en su explorador de soluciones y vuelva a generar la solución. Eso resolvería el problema

user1903050
fuente
¡Gracias! También funcionó para mí. Además de eso, actualicé todos mis paquetes nuget
Andre Kraemer
4

Tuve el mismo problema al instalar mi aplicación en el servidor cuando todo funcionó perfectamente en localhost.

Ninguna de estas soluciones funcionó, siempre tuve el mismo error:

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

Terminé haciendo esto:

  • en mi proyecto de configuración, haga clic derecho, ver> sistema de archivos
  • crear una bin/roslyncarpeta
  • seleccione agregar> archivos y agregue todos los archivos de packages\Microsoft.Net.Compilers.1.3.2\tools

Esto resolvió mi problema.

Alexandre Hamon
fuente
4

Reiniciar Windows

Esta es la única solución que me funcionó después de intentar reconstruir, eliminar contenido biny reconstruir, reiniciar Visual Studio.

Es otro ejemplo de cuán terribles son las herramientas de compilación de C # / .NET.

Creo que (después de leer muchas de las respuestas), la conclusión general es que la causa y la solución de este problema depende en gran medida de la configuración y el proyecto, por lo que si una respuesta no funciona, intente con otra. Pruebe primero soluciones no intrusivas / destructivas, como reiniciar Visual Studio, reiniciar, reconstruir, etc., PRIMERO, antes de meterse con paquetes NuGet o reinstalar herramientas de desarrollo. ¡Buena suerte!

(NOTA: Usando Visual Studio 2019, y el archivo del proyecto fue creado originalmente en Visual Studio 2015. Quizás esto ayude a alguien a investigar el problema)

(EDITAR: ¿Podría esto ser causado por no reiniciar después de instalar / modificar la instalación de Visual Studio o actualizar Visual Studio cuando el instalador solicita reiniciar?)

Florian Winter
fuente
3

Tengo un proyecto web sin el archivo csproj y las soluciones mencionadas aquí no me funcionaron.

Cambiar el framework .NET de destino, reinstalar paquetes ( Update-Package -reinstall) y luego construir el proyecto funcionó para mí. Incluso puede volver a cambiar el marco de destino después de esta operación (asegúrese de reinstalar nuevamente los paquetes nuget).

Miroslav Adamec
fuente
Este es un "proyecto de sitio web". Utilicé este comando para reinstalar el paquete:update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -reinstall
GarDavis