2014-12-16 1 views
6

Sto costruendo un'applicazione in C#, finora tutto ciò che fa è chiamare il comando powershell "get-process".Impossibile caricare il file o l'assembly 'System.Management.Automation, Version = 3.0.0.0

ho modificato il file csproj per includere System.Management.Automation

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

Quando viene eseguito in locale (Windows 8.1 in esecuzione Powershell versione 4) che funziona.

Quando viene eseguito su un computer Windows 7 a distanza con PowerShell versione 2, il programma genera un'eccezione

System.IO.FileNotFoundException: Could not load file or assembly 'System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified. 

non riesce a trovare System.Management.Automation Version = 3.0.0.0. Sono stato portato a credere che ciò avrebbe funzionato su qualsiasi versione di Powershell e fare riferimento alla versione locale

Il cmdlet Get-Process funziona su PS V2.

È possibile interrompere la forzatura della versione 3 dell'automazione di gestione del sistema? Ho letto che puoi farlo nell'app.config ma non vi è alcun riferimento all'automazione della gestione del sistema.

Grazie per il vostro tempo.

---------------------------------------------- -------- MODIFICARE ----------------------------------------- ------

Sono stato in grado di farlo funzionare ma impostando il framework Target su .Net 3.5, tuttavia questo ora impone PS V2. È possibile comunque indirizzare la versione locale della DLL di gestione del sistema e far sì che i client utilizzino tale versione?

+0

si è in grado di aggiornare semplicemente PowerShell nel 7 scatola di Windows? '> choco installa Powershell' con [Chocolatey] (https://chocolatey.org/) –

+0

Bene, dovrai scegliere come target .NET 3.5 se vuoi che PowerShell versione 2 sia in grado di caricare la DLL. –

+0

Questo sembra un po 'schifo nel fatto che puntando su NET 3.5 sto forzando ogni client a PowerShell 2 e PowerShell 2 solo .. Sicuramente c'è un altro modo? – Matt416

risposta

7

Powershell 2.0 non include System.Management.Automation V3. System.Management.Automation è fornito da Windows Management Framework Core, non .Net. Se hai Powershell 2.0, non hai Automation 3.0. Per un elenco di quali file/assiemi sono forniti in PowerShell 2.0 visitare il seguente sito:

Windows Management Framework (Windows PowerShell 2.0, WinRM 2.0, and BITS 4.0)

aggiornamento a PowerShell 4.0 con l'installazione WMF 4,0 da Microsoft sul computer di destinazione.

http://www.microsoft.com/en-us/download/details.aspx?id=40855

+0

Ciao scusa ero via per il fine settimana, ho segnato come risposta. C'è comunque il mio programma in grado di funzionare sia con PowerShell versione 3+ che versione 2? sembra impossibile – Matt416

+1

Una delle due cose dovrebbe verificarsi. Riscrivi il programma per l'assembly 2.0 o aggiorna l'assembly in modo che il tuo programma funzioni in modo nativo. Queste sono le uniche due opzioni che conosco: - / – Colyn1337