I started a new .NET Framework 4.7.2 library project. I need to automate PowerShell scripts, but the "framework" tab in Visual Studio's reference adding UI didn't list System.Management.Automation as an option. So I added a reference to this Nuget package:
Then with this code:
PowerShell ps = PowerShell.Create();
ps.AddScript(@"C:\ps\function.ps1");
ps.AddArgument(1);
ps.AddArgument(2);
Collection<PSObject> results = ps.Invoke<PSObject>();I get this error about versions of a DLL which I did not directly reference:
Assembly 'System.Management.Automation' with identity 'System.Management.Automation, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' uses 'System.Linq.Expressions, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' which has a higher version than referenced assembly 'System.Linq.Expressions' with identity 'System.Linq.Expressions, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
I'm not sure how to resolve this, and I think maybe I approached adding my PowerShell automation library reference the wrong way. What's the right way to do this currently?
Before you point me at an old answer, I found a similar question about this which points to a different Nuget package, now marked "deprecated" and doesn't look official anyway. That makes me nervous.
22 Answers
System.Management.Automation v7.0.0 only works with .NET Core. If your project requires .NET Framework, you must use System.Management.Automation v5.1.x.
I use System.Management.Automation.dll in my .net framework 4.7.2 app.
I just added it via the following reference:
C:\WINDOWS\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\System.Management.Automation.dll