解決此問題的方法是將DLL添加到GAC中,正如我在其中一條回覆中所建議的那樣。正如我在其中一個回覆中指出的那樣,在這個過程需要運行的環境中,缺乏可用性。因爲這個原因,簡單的解決方案不是一種選擇。要解決這一點,我得出一個豪華的功能,將DLL文件添加到GAC:Add-Type -ReferencedAssemblies失敗,無法加載或找到程序集。解決方案
參數([字符串] $的DLLPath)
[字符串] $ publicToken = $空 [字符串] $ VAL = $空 [字符串] $版本= $空
如果(測試路徑)$的DLLPath) { $ baseFileName = [System.IO.Path] :: GetFileNameWithoutExtension($的DLLPath) $目標名稱=「C:\ WINDOWS \ assembly \ GAV_MSIL \「+ $ baseFileName
# Get the key and public token
$val = sn -Tp $dllPath
# Get the version w/o loading
$version = [System.reflection.AssemblyName]::GetAssemblyName($dllPath).Version
# Proceed if the token is valid
if ($val -ne -null)
{
$vals = $val.split(" ")
$publicToken = $vals[$vals.length-1]
$targetNameSub=$targetName + "\" + $version + "__" + $publicToken
if (!(test-path $targetName))
{
Md $targetName | Out-Null
}
Md $targetNameSub | Out-Null
# Copy the DLL to the GAC
copy-item $dllPath $targetNameSub | Out-Null
}
}
我已經測試過,它工作得很好。在我的研究中,我發現了一些東西,表明這種擴大能力使得我不想做註冊表。但是這個功能確實工作得很好。
我試圖扭轉過程來拿出一個Posh函數來刪除GAC條目,但我還沒有成功,但每次獲得拒絕訪問的DLL文件刪除。
.NET程序集加載不使用PATH的環境變量。它可以從應用程序的基本目錄加載它(正如您將dll複製到PowerShell基本目錄時所看到的),也可以像@critobalito建議的那樣從GAC加載它。您有幾個修改此行爲的選項。您可以添加探測目錄(請參閱此文章http://msdn.microsoft.com/en-us/library/15hyw9x3(VS.71).aspx)。您也可以掛接AppDomain.ResolveEvent,以便有機會從任何您想要的地方加載程序集。我個人會在上面的C#代碼中執行此操作。 – 2010-09-27 20:21:13