在Visual Studio中引用system.management.automation.dll

145

我开始研究PowerShell模型和插件开发,首先注意到的是需要引用System.management.automation.dll。然而,在Visual Studio中,.NET选项卡没有该程序集,也无法浏览到

C:\windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\System.Management.Automation.dll

以进行基于文件的引用。

我必须手动复制文件以便于引用吗?


你能否考虑更改接受的答案为这个吗?NuGet包方法似乎是最直接和强大的。 - julealgon
9个回答

178

3
这需要更多的点赞。 - foobarcode
5
我希望微软接手这个Nuget,因为它们在开放性方面表现得非常出色。 - skfd
@skfd 微软已经基本上拥有了Nuget。背后的人使用微软的电子邮件,而NuGet本身是微软.NET基金会(http://www.dotnetfoundation.org/)的一部分。 - Michael Bisbjerg
1
@MichaelBisbjerg,我认为他主要是指这个特定的NuGet包。如果它是微软拥有的,那么(在理想的情况下),他们将负责保持其更新,发布新的包等。 - Ben Randall
最后更新于2013年3月29日:“所有者已将此软件包取消列出。这可能意味着该软件包已被弃用或不应再使用。” - juFo
3
第二个项目现在也被取消了,第三个项目依赖于.net 5.0或core。我们应该如何处理使用.net 4.X的应用程序? - Tim Sparkles

97
在安装Windows SDK(一个合适的、最新版本的)时,会安装System.Management.Automation.dll 的副本。它应该位于C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0\中。

2
我已经在两台不同的64位机器上安装了SDK(费了一些力气),发现版本6.2.8229.0,4.66MB的dll只有一个,而且只在c:\program files (x86)\reference assemblies\microsoft\windowspowershell\v1.0中。我强烈建议编辑.csproj文件或将正确的DLL检入源代码控制并引用它。SDK安装过于死板。 - James McLachlan
@ashes999 PowerShell 2.0 实际上是在 1.0 DLL 上运行的。 - kravits88
4
2014年7月11日在x64上,它位于C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\3.0\System.Management.Automation.dll。 - Christopher G. Lewis
我不知道SDK,但我知道WMF 3.0 不会将其安装到C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 3.0中。我想在Windows 7 SP1上安装PowerShell 3.0,该版本位于C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 1.0中,我使用了来自https://www.microsoft.com/en-us/download/details.aspx?id=34595的Windows6.1-KB2506143-x64.msi,并且运行成功。但是它只在C:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System.Management.Automation / v4.0_3.0.0.0__31bf3856ad364e35中创建了*.dll。 - Alexander Samoylov
这是一个适当的*.dll文件,因为如果我移动*.dll文件,命令“powershell.exe -version 3.0”将停止工作。该*.dll文件的大小与另一台Windows 10机器上C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\3.0目录下默认存在的大小不同。我可以在Windows 7 SP1机器上创建文件夹C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\3.0,并将C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation/v4.0_3.0.0.0__31bf3856ad364e35中的*.dll文件放入其中,但问题是如何正确安装它。 - Alexander Samoylov

94

如果你不想安装Windows SDK,你可以通过在powershell中运行以下命令来获取dll:

Copy ([PSObject].Assembly.Location) C:\

3
非常甜。我原本想不到那个。 - Marius
谢谢您。在全新的.NET 4.5.2控制台应用程序中,NuGet包对我无效。它“安装”了该包,但拒绝添加引用。最后,我放弃了NuGet并使用了您的答案手动添加引用。谢谢! - Lews Therin
9年过去了,这仍然是唯一相关的答案,因为它能够在运行时智能地获取位置信息 - 绝对应该被接受。 - Ohad Schneider

90

我无法正确安装SDK(有些文件似乎未签名,类似于这样的问题)。我在这里找到了另一个解决方案,对我而言似乎可以正常工作。它根本不需要安装新文件。基本上,您需要做的是:

在文本编辑器中编辑.csproj文件,并添加以下内容:

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

到相关部分。


1
对我来说,我们必须手动进行这个操作(编辑.csproj文件)似乎有些奇怪,但它对我起作用了。 - kd7iwp
编辑项目文件只会强制从全局程序集缓存(GAC)中加载版本2,而不是从文件系统中加载版本1。 - Derek Evermore
1
这可能会导致问题,当应用程序部署到服务器上时,因为程序集可能在那里找不到。 - marsze
仍然是一种优雅的方法。它对我也起作用了。 - J.Tribbiani

10
如果是64位系统,则路径为 - C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell**3.0**。版本可能有所不同。

3

正如@skfd所提到的,如果你的目标是 .Net 4.8 或更早版本,则可以在NuGet上获取System.Management.Automation.dll包,但现在已被下架,因此你需要手动安装。例如:

PM >Install-Package System.Management.Automation.dll -Version 10.0.10586

如果你的目标是 .Net Core 或 Framework 5/6,System.Management.Automation 包也可以使用,并且似乎是未来支持的包。你也可以尝试安装此包并手动添加引用,但效果可能会有所不同。


3
我使用VS项目引用菜单并浏览到:C:\windows\assembly\GAC_MSIL\System.Management.Automation,并添加了dll和Runspaces dll的引用。 我不需要修改.csprj文件并添加上述引用行。我没有安装Windows SDK。 我确实执行了上述Powershell代码复制操作: Copy([PSObject] .Assembly.Location)C:\ 然后我的Get-Process Powershell命令测试成功。我参考了《Powershell for Developers》第5章中的示例。

2

随附Powershell SDK的程序集(C:\ Program Files \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ v1.0)不带有Powershell 2特定类型。

手动编辑csproj文件解决了我的问题。


0

我曾经遇到这样一个问题,即项目引用了正确的DLL文件,但重新生成时出现了找不到"Automation package"的错误。使用Nuget解决了这个问题。在运行Install-Package时,请确保在包管理器控制台中选择正确的"默认项目"。 - user3523091
1
这对于PowerShell 5.1不起作用。该软件包仅适用于PS 6/7。 - cbeckner
2
需要.NET 5.0。 - Mike Lowery

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接