簡體   English   中英

引用其他項目dll的C#cmdlet dll加載失敗

[英]C# cmdlet dll that references other project dll fails on load

我有一個C#項目用作PowerShell cmdlet-這應該是產品主要功能的API-因此我必須在我的PowerShell庫中引用很多dll。

我的問題是客戶希望從任何位置加載PowerShell dll,而無需將工作目錄設置為所有dll所在的程序文件夾。 但是,僅當我通過快捷方式打開Powershell時,才能使用PowerShell命令,該快捷方式將工作目錄設置為如下所示的程序文件文件夾:

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

並將工作目錄也設置到我已經安裝了該產品的程序文件文件夾中。

如果我只是用

[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

使用“ 1”參數調用“ LoadFrom”的異常:“無法加載文件或程序集'file:/// C:\\ Program Files(x86)\\ ASG-Remoteesktop 2016 \\ ASGRD-PSAPI.dll”或以下之一依存關系。系統找不到指定的文件。” 在第1行:char:1 + [reflection.assembly] :: loadFrom('C:\\ Program Files(x86)\\ ASG-Remoteesktop 2016 \\ A ... + ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ + CategoryInfo:未指定:(:) [],MethodInvocationException + FullyQualifiedErrorId:FileNotFoundException

在這里猜測是因為您沒有提供錯誤,但是如果它在同一目錄下而不是在另一個目錄下工作,則可能是C#DLL使用相對路徑。

當前目錄為C:\\Program Files(x86)\\MyProduct ,使用完整路徑還是使用Resources\\MyFile.dat都沒有關系,兩者都將位於同一位置。 但是,如果您位於根目錄C:則相對路徑將查找C:\\Resources\\MyFile.dat ,這當然不存在。 當您使用C:\\Program Files(x86)\\MyProduct\\Resources\\MyFile.dat時,無論當前目錄是什么,它都將始終有效。

檢查C#DLL中是否有相對路徑,然后臨時更改工作目錄或使用絕對路徑。

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

有關更多詳細信息,請在powershell中執行以下命令,並檢查為-name參數指定的詳細信息。

get-help import-module -detailed

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM