2017-02-21 73 views
0

我使用PowerShell命令一個C#項目失敗 - 這應該是API的產品的主要功能 - 所以我必須引用大量的DLL的在我的PowerShell庫。C#cmdlet的DLL負載

我的問題是,客戶想要的工作目錄加載從任何位置PowerShell的DLL,而不設置到所有的DLL所在的程序文件夾。但我只能用我的PowerShell命令,如果我打開PowerShell的通過在工作目錄設置爲程序文件的快捷方式文件夾是這樣的:

C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -noexit -command "[reflection.assembly]::loadFrom('.\PSAPI.dll') | import-module" 

,並設置也到我的Program Files文件夾的工作目錄,其中的產品已經安裝。

如果我只是用

[Reflection.Assembly]::LoadFile("C:\Program Files(x86)\MyProduct\PSAPI.dll") 

[Reflection.Assembly]::LoadFrom("C:\Program Files(x86)\MyProduct\PSAPI.dll") 

它總是失敗。有沒有解決方案(沒有複製所有文件到PowerShell文件夾)?

這是我嘗試和我得到的錯誤 - 我不能設置被引用的dll的其他方式--.NET應用程序正在工作目錄中查找引用的dll的 - 我設置工作目錄在powershell中以確保我是在正確的目錄,但它不會加載我模塊

[reflection.assembly]::loadFrom('C:\Program Files (x86)\ASG-Remoteesktop 2016\ASGRD-PSAPI.dll') | import-module 

異常調用「LoadFrom」與「1」的說法(S):「無法加載文件或 彙編「文件:///C:\ Program Files(x86)\ ASG-Remoteesktop 2016 \ ASGRD-PSAPI.dll'或其依賴項之一。系統找不到指定的 文件。 At line:1 char:1 + [reflection.assembly] :: loadFrom('C:\ Program Files(x86)\ ASG-Remoteesktop 2016 \ A ... + ~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ ~~~ + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:FileNotFoundException異常

回答

0

猜測這裏爲你的避風港」 t提供了錯誤,但是如果它在同一個目錄下工作,而不是從另一個目錄下工作,那很可能是C#DLL使用相對路徑。

噹噹前目錄是C:\Program Files(x86)\MyProduct它不是m如果您使用完整路徑或僅使用Resources\MyFile.dat,則兩者將最終在相同的地方。但是,如果您位於根C:,則相對路徑將查找C:\Resources\MyFile.dat,當然這不存在。當您使用C:\Program Files(x86)\MyProduct\Resources\MyFile.dat時,無論當前目錄是什麼,它都會始終有效。

檢查您的C#DLL的任何相對路徑,並臨時更改工作目錄或使用絕對路徑。

0

一種方法可能是:添加您的裝配路徑C:\Program Files(x86)\MyProductPSModulePath環境變量。一旦完成,您可以執行import-module -name <name of your module>,它會從您的文件夾中加載它。在這種情況下,你不需要明確加載你的程序集(最可能)。

有關詳細信息執行所遵循PowerShell命令和檢查-name參數給出的細節。

get-help import-module -detailed