2009-12-08 13 views
9

Tengo un error de compilación en un programa c sharp que estoy compilando en Visual Studio 2008 en un servidor Windows (2008, supongo) SP 2 64-BIT OS. Dice que 'System.Management.Automation.PSObject' se define en un ensamblaje al que no se hace referencia. Hice algunas búsquedas en MSDN y descubrí que esto parece ser parte del Windows Power Shell SDK. http://msdn.microsoft.com/en-us/library/system.management.automation.psobject(VS.85).aspxWindows Powershell SDK y System.Management.Automation.PSObject

El problema es que ya tengo Windows Powershell. Si esto es todo lo que necesito, ¿cómo lo uso o lo menciono en el C Sharp IDE? Si necesito descargar algo extra (es decir, el SDK), ¿a dónde voy para hacer esto e instalarlo? No pude encontrar nada en línea.

Respuesta

14

Busque en C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0 para System.Management.Automation.dll y, si existe, agréguelo como referencia en su proyecto de C#. Si no existe, descargue el Windows SDK que colocará el archivo en la ubicación anterior.

+0

Sweet. Gracias. Eso funcionó. – xarzu

+0

Obtenlo de NuGet en su lugar. – pkr298

34

Si no puede encontrarlo allí, escríbalo en un indicador de PowerShell.

Copy ([PSObject].Assembly.Location) ~/Desktop 
+1

+1. Bonito :-) – Joey

+0

Buen consejo también. Gracias. – xarzu

+0

gracias! realmente me ayudó porque la versión x86 realmente no funcionaba: p – chikuba

13

Para hacer referencia correctamente a PowerShell, debe hacer referencia al PowerShell dentro del GAC. El PowerShell incluido con Vista SDK es PowerShell V1.0, y esta técnica hará referencia a 1.0, 2.0 o X.0, independientemente de lo que esté instalado. Hacer referencia al ensamblado de SDK tampoco creará el más portátil de los proyectos, porque debe tener el SDK instalado para construir el proyecto, en lugar de solo Visual Studio y Windows.

Desafortunadamente, hacer referencia a los elementos de GAC no es algo que la UI del estudio visual haga limpiamente, por lo que debe ir a mano a editar el archivo CSProj. Encuentre la sección con elementos y agregue este elemento de referencia.

<Reference Include="System.Management.Automation" /> 

Esto hará referencia a la última System.Management.Automation instalado en el sistema, no importa qué versión es.

Espero que esto ayude

+1

Hmm, entiendo que el GAC es para el acceso en tiempo de ejecución a los ensamblados y que, para la compilación, debe colocar los ensamblajes en otra ubicación a la que se pueda hacer referencia fácilmente desde Visual Studio, p. "$ env: ProgramFiles \ Reference Assemblies". –

+0

Realmente no importa a cuál se refiera. El nombre seguro coincidirá y la política del editor redireccionará al ensamblaje correcto en GAC, independientemente de dónde lo haya referenciado. El que está en GAC es solo una forma de último recurso para tener un ensamblaje actualizado como referencia. Con SharePoint, por ejemplo, es la única forma de extraer los ensamblajes para construir un sistema operativo de cliente. – Josh

+1

Bueno, solía ser el caso al que hizo referencia en una ubicación que también incluía un archivo XML de comentarios de documentos que proporcionaba información adicional de Intellisense. No estoy seguro si ese sigue siendo el caso hoy. –