providers not net microsoft located error dotnetcompilerplatform could compiler .net codedom roslyn

.net - located - could not load file or assembly microsoft codedom providers dot net compiler platform



Microsoft Roslyn vs. CodeDom (4)

CodeDom te permite compilar, pero no te da la posibilidad de obtener realmente información sobre el código en sí (aparte de los errores del compilador). Básicamente, es una caja negra donde dice "compilar esto" y dice "Logré" o "Fallé, aquí hay algunos errores".

Roslyn te permite inspeccionar por completo y construir el código sobre la marcha. Esto incluye cosas como poder ver / inspeccionar los comentarios dentro de un fragmento de código fuente, información detallada sobre la estructura completa, etc. Puede acceder y obtener todo el árbol de sintaxis de la fuente que pasa a Roslyn, y hacer un análisis detallado o transformaciones en eso.

Dada la completa y rica información de sintaxis, tiene una enorme cantidad de control y flexibilidad adicionales. Así es como, por ejemplo, funciona la muestra que copia un bloque de código C # y lo pega como código VB.NET. Con Roslyn, puede hacer más que simplemente compilar, también puede manipular el código de manera limpia. Esto debería hacer que muchas herramientas sean mucho más sencillas de generar, ya que las refactorizaciones se pueden hacer de forma muy simple, ya que las herramientas comprenden la sintaxis completa, incluida la metainformación (como los comentarios), y pueden trabajar directamente con ella.

De un comunicado de prensa ayer en InfoWorld sobre el nuevo Microsoft Roslyn :

La ventaja más obvia de este tipo de compilador "deconstruido" es que permite invocar todo el proceso de compilación y ejecución desde las aplicaciones .Net. Hejlsberg demostró un programa C # que pasó algunos fragmentos de código al compilador de C # como cadenas; el compilador devolvió el código de ensamblado IL resultante como un objeto, que luego se pasó al Common Language Runtime (CLR) para su ejecución. Voilà! Con Roslyn, C # gana la capacidad de un lenguaje dinámico para generar e invocar código en tiempo de ejecución.

He podido hacer esto desde el lanzamiento de .NET 4 con CSharpCodeProvider.CompileAssemblyFromSource que, de hecho, uso en un proyecto de ASP.Net escrito hace un momento que hace exactamente eso: permite que un usuario escriba el código en un cuadro de texto, elija ensamblados / espacios de nombres para referenciar, y luego ejecutar y visualizar el resultado de ese código sobre la marcha para la prueba del código del entorno en vivo en Windows Azure.

¿ CodeDom es parte de / un precursor de Roslyn? ¿Cuál es el beneficio especial de Roslyn sobre CodeDom ?


Roslyn permite un control mucho más preciso de todo el proceso; por ejemplo, puede analizar la cadena e incluso generar código adicional (sobre la marcha dentro del proceso de compilación en función del análisis), etc.

CodeDom está "simplemente usando el compilador" mientras que Roslyn es "compilador como un servicio con acceso total a (sub) partes" ... con Roslyn estás "dentro del compilador" y puedes ver cómo se ve el código desde la perspectiva del compilador permitiéndole cambiar las cosas de maneras actualmente no posibles.

Por ejemplo, puede usar Roslyn para extender C #, algo muy útil y mucho mejor que el estado actual de la implementación de AOP.

Para obtener una descripción general del estado actual de Roslyn y los diferentes niveles de acceso y control que proporciona, consulte http://msdn.microsoft.com/en-us/hh500769

ACTUALIZAR

Microsoft acaba de hacer disponible un nuevo CTP con características adicionales y muchos cambios / adiciones de API. Para más detalles ver here .


Una gran diferencia que veo: con CodeDom, cada vez que compila C # o VB.NET, pasa fuera de proceso. CSC.exe o VBC.exe son los verdaderos trabajadores detrás de la escena.

Si desea construir un servicio, en términos de arquitectura, escalabilidad, aislamiento, etc. (menciona a Azure), esto no es muy bueno.

Con Roslyn está en proceso.

Supongo que esta es una de las razones por la que lo llaman "Compilador como servicio".

Además, CodeDom es una API relativamente pobre, pierde muchas características y no está realmente actualizada, ya que fue diseñada principalmente para admitir la generación automática de código de diseñadores de Visual Studio UI. Creo que a Roslyn le irá mucho mejor ya que está escrito por los tipos que escriben los compiladores. Espero que eso haga la diferencia.

PD: una diferencia notable de CSC.exe y VBC.exe: Roslyn parece ser .NET pura (y usa CCI ).


Descargo de responsabilidad : trabajo para Microsoft en el equipo de Roslyn.

CodeDom es un precursor de Roslyn, pero solo está relacionado marginalmente. Esencialmente, CodeDom es una forma agnóstica simple y (algo) aburguesa de generar código que se agregó en .NET 1.0 para admitir diseñadores (al estilo de WinForms). Debido a que CodeDom fue un intento de proporcionar un modelo unificado que puede generar código en C #, VB y otros lenguajes, carece de alta fidelidad con cualquiera de los idiomas que admite (es por eso que no puede crear una instrucción switch con CodeDom). CSharpCodeProvider.CompileAssemblyFromSource es simplemente un contenedor para la ejecución de csc.exe.

Roslyn es un animal completamente diferente. Es una reescritura de los compiladores C # y VB desde cero utilizando código administrado: C # en C # y VB en VB (las versiones de csc.exe y vbc.exe que se envían hoy están escritas en código nativo). La ventaja de crearlos en código administrado es que los usuarios pueden hacer referencia a los compiladores reales como bibliotecas de aplicaciones .NET (no se necesitan envoltorios).

Al construir cada componente de la canalización del compilador, hemos expuesto las API públicas en la parte superior:

  • Analizador -> API de árbol de sintaxis
  • Importar tabla de símbolos / metadatos -> API de símbolos
  • Binder -> API de enlace y análisis de flujo
  • Emisor IL -> Emitir API

Roslyn puede usarse como un sofisticado generador de código fuente C # y VB, pero ahí es donde termina la similitud con CodeDom. Las API del compilador de Roslyn se pueden usar para analizar código, realizar análisis semánticos, compilar y evaluar código dinámicamente, etc.

Además de los compiladores, el equipo de Roslyn también está reconstruyendo las características de Visual Studio C # y VB IDE sobre las API del compilador público. Por lo tanto, las API del compilador son lo suficientemente ricas como para construir las herramientas de Visual Studio en tiempo de diseño, como IntelliSense y la refactorización de Extract Method. Además, en las capas superiores al compilador, Roslyn ofrece servicios para análisis de alto nivel o transformación de datos. Por ejemplo, hay servicios para formatear código usando las reglas de formato C # y VB, o encontrar todas las referencias a un símbolo particular dentro de una solución.

Realmente, no hay solo un beneficio especial de Roslyn sobre CodeDom. Donde CodeDom llenó una necesidad de generación de código muy específica, Roslyn está abordando todo el espacio de herramientas de idiomas al proporcionar un marco que le permite construir casi cualquier tipo de herramienta de lenguaje C # o VB que se le ocurra.