2009-12-08 67 views
9

我在Windows Server(2008,我猜)SP 2 64位操作系统上的Visual Studio 2008中编译的c sharp程序中有一个编译错误。 它说'System.Management.Automation.PSObject'是在未引用的程序集中定义的。 我在MSDN中进行了一些搜索,发现这似乎是Windows Power Shell SDK的一部分。 http://msdn.microsoft.com/en-us/library/system.management.automation.psobject(VS.85).aspxWindows Powershell SDK和System.Management.Automation.PSObject

问题是我已经安装了Windows Powershell。如果这是我所需要的,我该如何使用它或在C Sharp IDE中引用它。如果我需要下载一些额外的东西(比如SDK),我该在哪里去做并安装它?我在网上找不到任何东西。

回答

14

请在C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0中查看System.Management.Automation.dll,如果存在,请将其作为C#项目中的参考添加。如果它不存在,那么下载Windows SDK这将把文件放在上面的位置。

+0

甜。 谢谢。 工作。 – xarzu 2009-12-08 18:22:33

+0

改为从NuGet中获取。 – pkr298 2017-04-26 15:56:36

34

如果您在那里找不到它,请在PowerShell提示符下键入。

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

+1。好的一个:-) – Joey 2009-12-08 06:14:04

+0

太好了。 谢谢。 – xarzu 2009-12-08 18:23:28

+0

谢谢!真的有帮助,因为x86版本没有真正的工作:p – chikuba 2012-06-06 00:19:52

13

要正确引用PowerShell,您应该引用GAC中的PowerShell。 Vista SDK附带的PowerShell是PowerShell V1.0,无论安装了什么,该技术都会引用1.0,2.0或X.0。引用SDK程序集也不会创建最便携的项目,因为必须安装SDK来构建项目,而不仅仅是Visual Studio和Windows。

不幸的是,引用GAC项目并不是Visual Studio UI干净利落的地方,因此您必须手动编辑CSProj文件。找到包含元素的部分,并添加此参考元素。

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

这将引用安装在系统上的最新System.Management.Automation,不管它是什么版本。

希望这会有帮助

+1

嗯,我的理解是GAC用于运行时访问程序集,编译时,你应该把你的程序集放在另一个可以很容易地从Visual Studio引用的位置,例如“$ env:ProgramFiles \ Reference Assemblies”。 – 2009-12-08 21:00:43

+0

你引用哪一个并不重要。强名称将匹配,并且发布者策略将重定向到GAC中的正确程序集,而不管您从何处引用它。 GAC中的一个只是获取最新程序集以供参考的最后一种方法。以SharePoint为例,它是解压缩客户端操作系统的程序集的唯一方法。 – Josh 2009-12-09 00:46:18

+1

那么它曾经是您在一个位置引用的情况,该位置还附带了提供额外Intellisense信息的XML文档注释文件。不确定今天是否仍然如此。 – 2009-12-09 18:32:28