c # — Ошибка загрузки сборки

У меня проблема с управляемой загрузкой сборки, возникающая в результате процесса смешанного режима. Смотрите ниже для деталей. Предположим, что BinPath и ExecutablePath являются двумя действительными путями, которые не совпадают.

У меня есть веб-приложение, которое было запущено в BinPath, и создает процесс, используя следующую ProcessStartInfo:

new ProcessStartInfo()
{
FileName = ExecutablePath + "PerformanceRunner.exe",
WorkingDirectory = ExecutablePath ,
UseShellExecute = true
};

Затем PerformanceRunner.exe успешно загружает несколько неуправляемых библиотек DLL, которые находятся в ExecutablePath (это проверяется, просматривая окно модулей в VS). Затем он пытается загрузить управляемую сборку, также расположенную в ExecutablePath, но это не удается. Вот журнал объединения этого: обратите внимание, что BinPath — это «G: \ TOPSS \ TOPSS New \ Common \ Service \ Bin», а управляемая сборка — TPSSCDQ.dll. TPSSCDQ находится в ExecutablePath.


* Запись журнала переплетов сборки (29.11.2012 @ 16:16:11 PM) *

Операция не удалась. Результат привязки: hr = 0x80070002. Система не может
найти указанный файл.

Менеджер сборки загружен из:
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ clr.dll Работает под
исполняемый файл G: \ TOPSS \ TOPSS New \ Common \ Service \ Bin \ PerformanceRunner.exe


=== Предварительно связать информацию о состоянии ===

ЖУРНАЛ: Пользователь = CORP \ lbhra

ЖУРНАЛ: DisplayName = TpssCDQ, версия = 1.0.4612.26218, культура = нейтральная,
PublicKeyToken = null (полностью указано)

ЖУРНАЛ: Appbase = file: /// G: / TOPSS / TOPSS Новый / Общий / Сервис / Корзина /

ЖУРНАЛ: Initial PrivatePath = NULL

ЖУРНАЛ: Динамическая база = NULL

ЖУРНАЛ: Cache Base = NULL

ЖУРНАЛ: AppName = PerformanceRunner.exe

Вызывающая сборка: (неизвестно).

===

ЖУРНАЛ: Это связывание начинается в контексте загрузки по умолчанию.

ЖУРНАЛ: Файл конфигурации приложения не найден.

ЖУРНАЛ: Использование файла конфигурации хоста:

ЖУРНАЛ: Использование файла конфигурации машины из
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ machine.config.

ЖУРНАЛ: Политика не применяется к ссылке в настоящее время (частная,
пользовательская, частичная или привязка сборки на основе местоположения).

ЖУРНАЛ: Попытка загрузки нового файла URL: /// G: / TOPSS / TOPSS New / Common / Service / Bin / TpssCDQ.DLL.

ЖУРНАЛ: Попытка загрузки нового файла URL: /// G: / TOPSS / TOPSS New / Common / Service / Bin / TpssCDQ / TpssCDQ.DLL.

ЖУРНАЛ: Попытка загрузки нового файла URL: /// G: / TOPSS / TOPSS
Новые / Общие / Услуги / Bin / TpssCDQ.EXE.

ЖУРНАЛ: Попытка загрузки нового файла URL: /// G: / TOPSS / TOPSS New / Common / Service / Bin / TpssCDQ / TpssCDQ.EXE.

ЖУРНАЛ: Все зондирующие URL-адреса были попытки и не удалось.


Я не совсем понимаю, что такое PrivatePath, Appbase или Dynamicbase, но не должен ли хотя бы один из этих путей быть рабочим каталогом (ExecutablePath)? С помощью GetCurrentDirectory я проверил, что рабочий каталог установлен правильно. Я действительно ценю руку с этим, поскольку я довольно смущен.

2

Решение

Вы правы, он должен искать в корневой папке, где хранится исполняемый файл. Он не будет выглядеть в рабочем каталоге — но я понимаю, что в этом случае эти пути одинаковы. Если вы посмотрите на свое сообщение об ошибке, APPBASE настроен правильно, поэтому я думаю, что он смотрит в нужном месте, но не находит его по другим причинам.

http://msdn.microsoft.com/en-us/library/yx7xezcf(v=vs.90).aspx

Другие вещи, чтобы проверить:

  • Есть ли у вас какие-либо советы по загрузке сборки в файлах конфигурации вашего приложения / машины?
  • Создана ли управляемая DLL для правильной платформы?
  • Управляемая DLL была переименована вообще — совпадает ли имя файла с манифестом?
  • Все зависимости управляемой DLL хранятся в одном и том же месте?

Кроме того, как вы загружаете эту сборку? Он указан в качестве ссылки на проект или вы вызываете Assembly.Load (или аналогичный)?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]