remove net asp c# asp.net asp.net-mvc roslyn

c# - net - No se pudo encontrar una parte de la ruta... bin / roslyn / csc.exe



remove roslyn c# (30)

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.

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.


  1. Solución limpia
  2. Reconstruir solución, estos dos pasos funcionaron para mí.

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


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


Además de eliminar el directorio Bin de todos los proyectos dentro de la solución, elimine también las carpetas obj.

En el directorio de la solución principal, elimine la carpeta .vs

A mí me funcionó al tratar de llevar un proyecto ya realizado a una solución en blanco creada en git.


Agregue PropertyGroup a su archivo .csproj

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


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.


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.


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)


El problema con las plantillas VS2015 predeterminadas es que el compilador en realidad no se copia en el {outdir}_PublishedWebsites/tfr/bin/roslyn/ , sino en el {outdir}/roslyn/ . Es probable que esto sea diferente de su entorno local, ya que AppHarbor crea 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 archivo .csproj 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


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>


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


En mi caso, la solución fue reinstalar / actualizar los paquetes de Nuget:

  • 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 en <Target> con el nombre "GuaranteeNuGetPackageBuildImports" en El fondo. Esto está en MVC 5 y .NET Framework 4.5.2.

Respuesta corta: ejecute esto en la consola de Package Manager:

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


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.DotNetCompilerPlatform que 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 nodo system.codedom , puede ver por qué traía roslyn: compilerOptions="/langversion:6


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

Buena suerte a cualquiera que tenga este problema.


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.


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 algún 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.Compilers fue 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, los Microsoft.Net.Compilers agregan 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.


Entonces, la respuesta de Rob Cannon esencialmente funcionó para mí, pero tuve que ajustar un puñado de 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>



La actualización de Microsoft.CodeDom.Providers.DotNetCompilerPlatform de 1.0.0 a 1.0.1 me arregló esto.


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


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


Reiniciar Windows

Esta es la única solución que funcionó para mí después de intentar reconstruir, eliminar el contenido de bin y reconstruir, reiniciar Visual Studio.

Es otro ejemplo de lo terribles que 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 dependen 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?)


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


Si estaba agregando ASPNETCOMPILER para compilar sus vistas de Razor en MVC, como en esta pregunta de , 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)" />


Su compilación está tratando de encontrar /bin/roslyn/csc.exe porque se han agregado los siguientes paquetes en su proyecto. Solo revise su archivo packages.config , 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 open-source compiladores de open-source 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. 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 de Nuget, use los siguientes comandos de la Consola de paquetes de 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 código siguiente en el archivo web.config 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>


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 veo el mismo error. Esto funciona como se esperaba


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 los paquetes nuget nuevamente después).


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 carpeta bin/roslyn
  • seleccione agregar> archivos y agregue todos los archivos de packages/Microsoft.Net.Compilers.1.3.2/tools

Esto resolvió mi problema.


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


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