2009-02-06 16 views
7

¿Es posible ejecutar PowerShell 1.0 (o 2.0 CTP) respaldado por el tiempo de ejecución 3.5 en lugar de 2.0?Uso de PowerShell con .NET 3.5 runtime/libraries

estamos construyendo una solución .NET 3.5, y todavía me gustaría utilizar PowerShell como nuestro motor de secuencias de comandos para tareas programadas, etc.

No necesito nada de sintaxis o LINQ, sólo el 3,5 bibliotecas y tiempo de ejecución.

SEGUIMIENTO: gracias por la respuesta sobre la carga dinámica de conjuntos. Pero permítanme aclarar mi pregunta: ¿hay alguna forma de ejecutar PowerShell para que las bibliotecas 3.5 se ejecuten de forma predeterminada? ¿De modo que si ingreso New-Object System.Xml.XmlDocument, por ejemplo, en realidad obtengo la versión 3.5 de manera predeterminada?

relacionada Semi pregunta: si yo hacer tienen que cargar dinámicamente, por ejemplo, la biblioteca System.Xml de 3,5, ¿verdad superposición las definiciones de los símbolos existentes de tal manera que la siguiente vez que se escriba New-Object System.Xml.XmlDocument, que se cargar la versión 3.5?

Respuesta

4

Mientras su derecho de obtener su nombre completo, no veo por qué esto no funcionaría:

[System.Reflection.Assembly]::Load("System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") 

Yo sólo se utiliza LINQ ya que fue el primero en venir a la mente. En ese punto, el ddl está cargado, y puede crear/usar objetos a partir de eso.

+0

Asumo, sin embargo, que si se carga dinámicamente un ensamblado de .NET 3.5 (incluyendo los que yo podría escribir), y luego crear un objeto .NET (digamos , un System.Xml.XmlDocument) y pasarlo a un método en mi ensamblado, pasaré un objeto 2.0 a un objeto 3.5. ¿Estoy en lo correcto? –

+0

Para pasar un documento de 3.5 Xml, realmente tendría que importar la biblioteca System.Xml de .NET 3.5 tal como lo demostró al hacer la biblioteca System.Xml.Linq. –

+0

No soy una persona pro-dev, pero tendería a estar de acuerdo en que sus suposiciones anteriores son correctas. –

3

PowerShell se creó en base a 2.0, por lo que no tiene más opciones que tener 2.0 presente al menos. Pero, como dice James, puede cargar la funcionalidad 3.0 y 3.5 cargando el ensamblaje apropiado. LINQ es un buen ejemplo de 3.5, pero también puede hacer WPF (3.0) desde PowerShell. Sin embargo, tenga en cuenta STA y MTA para WPF, ya que solo PowerShell v2 tiene soporte completo para WPF (soporte completo para la afinidad de subprocesos).

+0

¿Qué hay de mi pregunta sobre las superposiciones? ¿Puedo reemplazar (o al menos) ocultar un ensamblado 2.0 cargando el ensamblaje equivalente de 3.5, de modo que la implementación predeterminada de System.Xml.XmlDocument (por ejemplo) cambie? –

+0

Trataré de encontrar una forma de determinar esto con seguridad. Lo siento, me perdí esa parte. Siéntase libre de desmarcar como la respuesta. –

3

3.5 es efectivamente un ADD-ON para 2.0. Es decir, no hay clases reemplazadas en 3.5; no es un reemplazo. El CLR (Common Language Runtime) sigue siendo v2.0.

8

Si tiene 3.5 instalado en su sistema, eso es lo que obtendrá cuando ejecute PowerShell.

PowerShell es solo "requiere" 2.0 pero 3.0 y 3.5 son compatibles y automáticos cuando se instalan. En PowerShell V2, realmente buscamos ver qué versión tiene y "iluminar" ciertas funciones (por ejemplo, PowerShell_ISE y Out-GridView están disponibles cuando tiene 3.51).

Experimento! ¡Disfrutar! ¡Contratar!

Jeffrey Snover [MSFT] de administración de Windows Socio Arquitecto