Windows PowerShell SDK和System.Management.Automation.PSObject

9
我正在使用Visual Studio 2008在Windows Server(可能是2008)SP2 64位操作系统上编译C#程序时,遇到了构建错误。它说“System.Management.Automation.PSObject”定义在未被引用的程序集中。在MSDN上搜索后发现,这似乎是Windows PowerShell SDK的一部分。http://msdn.microsoft.com/en-us/library/system.management.automation.psobject(VS.85).aspx 问题是我已经安装了Windows Powershell。如果这就是我所需要的,那么我该如何在C Sharp IDE中使用它或引用它?如果我需要下载额外的东西(例如SDK),我应该去哪里下载并安装?我在网上找不到任何信息。
3个回答

34

如果你在那里找不到它,就在PowerShell提示符处键入此命令。

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

谢谢!真的很有帮助,因为x86版本并没有真正起作用:p - chikuba
如果你正在使用VS2015,这将复制版本6...而不是3到桌面上。我需要它的部分需要3。 - Maslow
@Maslow 我相信这将取决于您运行的 PowerShell 版本,而不是 VS 版本。 - Josh

14
为了正确引用PowerShell,应该引用GAC中的PowerShell程序集。Vista SDK包含的PowerShell版本是1.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”。 - Keith Hill
无论你引用哪一个都没关系。强名称将匹配,发布者策略将重定向到GAC中的正确程序集,无论你从哪里引用它。GAC中的那个只是一种最后的手段,用来获取最新的程序集以供引用。例如,在SharePoint中,这是提取客户端操作系统所需的程序集并进行构建的唯一方法。 - Josh
1
以前的情况是,您引用的位置还附带有提供额外智能感知信息的XML文档注释文件。不确定今天是否仍然如此。 - Keith Hill

14

C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0 中查找 System.Management.Automation.dll 文件,如果存在,则将其添加为 C# 项目的引用。如果不存在,则下载 Windows SDK,该程序会自动将文件放置在上述位置。


请从NuGet获取它。 - pkr

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