2010-09-27 96 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

相关问题