Add-Type -ReferencedAssemblies失败,无法加载或查找程序集。解

时间:2010-09-27 19:48:52

标签: powershell

此问题的解决方案是将DLL添加到GAC,正如我发布的一个回复中所建议的那样。正如我在其中一个回复中所指出的那样,在需要运行此过程的环境中将无法提供可用性。因此,简单的解决方案不是一种选择。为了解决这个问题,我派生了一个Posh函数,它将DLL添加到GAC:

PARAM([字符串] $的DLLPath)

[string] $ publicToken = $ null [string] $ val = $ null [string] $ version = $ null

if(test-path)$ dllPath) {     $ baseFileName = [System.IO.Path] :: GetFileNameWithoutExtension($ dllPath)     $ targetName =“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
}

}

我已对此进行了测试,效果非常好。在我的研究中,我发现了一些东西,表明gacutility使注册表中的条目我没有做。但是这个功能确实很有用。

我试图改变过程以提出一个Posh函数来删除GAC条目,但是我还没有成功,但每次都在DLL文件删除时拒绝访问。

2 个答案:

答案 0 :(得分:3)

听起来问题是tools.Utilities.dll本身很好,但如果它的依赖关系在c:\Program Files\subDir内是不可用的话。这是由错误消息和将DLL移动到其他文件夹的事实建议的。新文件夹中可能缺少相关性。

验证这一点的最简单方法是使用fuslogvw.exe确切地查看阻止tools.Utilities.dll加载的错误。

答案 1 :(得分:1)

将大会添加到GAC

gacutil /i Assembly.dll