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

Resuelto Eyad asked hace 9 años • 60 respuestas

Estoy intentando ejecutar un proyecto ASP.NET MVC (modelo-vista-controlador) recuperado del control de fuente TFS (Team Foundation Server). Agregué todas las referencias de ensamblado y puedo compilar y compilar exitosamente 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 de compilación .NET que ofrece funciones de compilación avanzadas. Sin embargo, no entiendo por qué mi compilación intenta encontrar \bin\roslyn\csc.exe porque no configuré nada relacionado con Roslyn. Tampoco tenía intención de utilizar a Roslyn en mi proyecto.

Eyad avatar Sep 25 '15 17:09 Eyad
Aceptado

TL; DR

ejecute 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 ocurre con la adición manual de binarios del compilador al proyecto.

El compilador 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, lo solucioné instalando los siguientes paquetes en versiones específicas:

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

Luego miré .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 "EnsureNuGetPackageBuildImports" en la parte inferior. Esto está en MVC 5 y .NET Framework 4.5.2.

andy250 avatar Dec 21 '2015 08:12 andy250

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

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 avatar Sep 25 '2015 10:09 Mitchell

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

pipedreambomb avatar Jan 05 '2017 11:01 pipedreambomb

NOTA: Si no está interesado en utilizar Roslyn, siga esta respuesta y elimínelo

La Roslyn:

Su compilación está intentando encontrar \bin\roslyn\csc.exeporque se agregaron los siguientes paquetes a su proyecto. Simplemente 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 a Roslyn y está interesado en implementarlo en el servidor, obtendrá errores no deseados en el sitio web, ya que muchos proveedores de alojamiento aún no han actualizado sus servidores y, por lo tanto, no admiten Roslyn. Para resolver este problema, deberá eliminar el compilador Roslyn de la plantilla del proyecto.

Cómo eliminarlo:

1. Elimine los paquetes NuGet, use los siguientes comandos desde 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 web.configel archivo 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 avatar Jul 29 '2016 22:07 Malik Khalil