2009-12-08 34 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