此问题的解决方案是将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文件删除时拒绝访问。
答案 0 :(得分:3)
听起来问题是tools.Utilities.dll
本身很好,但如果它的依赖关系在c:\Program Files\subDir
内是不可用的话。这是由错误消息和将DLL移动到其他文件夹的事实建议的。新文件夹中可能缺少相关性。
验证这一点的最简单方法是使用fuslogvw.exe确切地查看阻止tools.Utilities.dll
加载的错误。
答案 1 :(得分:1)
将大会添加到GAC:
gacutil /i Assembly.dll