Решением этой проблемы является добавление DLL в GAC, как было предложено в одном из ответов на мою публикацию.Как я отметил в одном из моих ответов, gacutility не будет доступен в среде, где необходимо запустить этот процесс.Из-за этого простое решение gacutility не вариант.Чтобы решить эту проблему, я получил шикарную функцию, которая добавит библиотеки DLL в GAC:
param ([строка] $ dllPath)
[строка] $ publicToken = $ null [строка] $ 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.удаление.