Сбой Add-Type -ReferencedAssemblies не удалось загрузить или найти сборку.Решение - PullRequest
1 голос
/ 27 сентября 2010

Решением этой проблемы является добавление 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.удаление.

Ответы [ 2 ]

3 голосов
/ 27 сентября 2010

Похоже, проблема в том, что tools.Utilities.dll сам по себе хорош, но один, если его зависимости недоступны внутри c:\Program Files\subDir.Это подтверждается как сообщением об ошибке, так и тем, что перемещение DLL в другую папку решает проблему.Вероятно, отсутствующая зависимость доступна в новой папке.

Самый простой способ убедиться в этом - использовать fuslogvw.exe, чтобы точно определить, какая ошибка препятствует загрузке tools.Utilities.dll.

1 голос
/ 27 сентября 2010

Добавьте сборку к вашему GAC :

gacutil /i Assembly.dll
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...