2010-09-27 36 views
1

解決此問題的方法是將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文件刪除。

+0

.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

回答

3

這聽起來像問題是tools.Utilities.dll本身是好的,但如果它的依賴關係是c:\Program Files\subDir內部不可用。這是由錯誤消息和將DLL移到其他文件夾修復此問題的事實提供的。新文件夾中可能缺少依賴關係。

驗證此最簡單的方法是使用fuslogvw.exe查看阻止tools.Utilities.dll加載的錯誤。

1

添加大會的GAC

gacutil /i Assembly.dll 
+0

gacutil選項似乎是最直接的解決方案。但是,當我嘗試將DLL添加到GAC時,我收到一個錯誤,指出「無法將程序集添加到高速緩存:未知錯誤。我嘗試使用程序集路徑,然後cd到dll目錄並嘗試相同但是我收到了同樣的錯誤,不知道在哪裏尋找錯誤的詳細信息 – user459866 2010-09-28 18:48:43

+0

我發現我使用的gacutil來自.NET 1.x版本,不幸的是,雖然交付的軟件將在.NET 3.5或更高版本,GAC將不會成爲已安裝系統的一部分,如果我手動將文件複製到gac,我可以使用這個類和方法,因爲GAC是一個視圖,可以編寫一個模仿gacutility的動作? – user459866 2010-09-29 21:56:06

+0

對不起 - 不知道。如何在安裝過程中無法使用GAC?我不是一個部署專家(並且我自己並沒有真正使用它),所以很抱歉,我不能提供更多幫助。 – cristobalito 2010-09-29 23:31:29

相關問題