1

некоторый контекстСбой загрузки сборки на MVC Просмотр

Я один закрытый исходный asp.net MVC приложение, назначенном для нескольких клиентов. Я пытаюсь разработать расширение, чтобы включить некоторые очень специфические функции, которые будут использоваться одним клиентом (он также будет иметь исходный код расширения).

Я разрабатываю расширение как другой проект mvc, загруженный как область. Я пытаюсь избежать развертывания двоичных файлов расширения в основной папке приложения/bin.

Я загружаю сборку расширения и ее зависимости вручную в PreApplicationStartMethod основной сборки приложения. Процесс регистрации области прошел нормально, и маршруты маршрутов регистрируются по назначению.

Проблема

Когда я пытаюсь загрузить некоторые страницы расширения, я получил «Точку зрения„хх“или его хозяин не был найден или нет вида двигателя не поддерживает искомых местоположение.» сообщения. Я немного исследовал и заменил содержимое представления на строку «Hello». Вид был отображен правильно.

Я попытался создать минимальное значение, которое вызывает ошибку, и получается, что это директива '@ model'directive. Я попытался выяснить, что происходит, и это ошибка загрузки сборки. Я создал минимальное представление с помощью объекта @model и попытался применить модель к исходному типу и получил следующее сообщение об ошибке: «Не удалось загрузить файл или сборку« xxx »или одну из его зависимостей. Система не может найти файл "(эта сборка содержит тип класса, используемый видом)

Для подтверждения проблемы я переместил указанную сборку в основную папку приложения/bin, и все сработало.

Я также ввел некоторые инструкции по манипулированию моделью на контроллере, просто чтобы выяснить, появится ли исключение, но все прошло нормально, я даже мог отображать сетку с помощью json.

я загружаю все assemly с:

var assembly = Assembly.LoadFrom(file) 
BuildManager.AddReferencedAssembly(assembly) 

Там что-то дополнительное, что нужно сделать?

ответ

1

Необходимо, чтобы добавить сборочный частный путь

AppDomain.CurrentDomain.AppendPrivatePath(pluginFolder); 

Не знаю реальное объяснение этого, но я предполагаю, что это относится к использованию Assembly.LoadFrom (файл) вместо Assembly.Load() и тот факт, что представления компилируются позже.

Смежные вопросы