Развертывание при разработке не может найти dll и его ссылки

Я создал базовый плагин, и он работал нормально, когда я развернул его для разработки с:

del "$(ProjectDir)\plugin.xml" "%Ocean2012Home%\PluginPackager.exe" /g "$(TargetPath)" "$(ProjectDir)\plugin.xml" "%Ocean2012Home%\PluginPackager.exe" /mh "$(ProjectDir)\plugin.xml" "%OCEAN2012HOME%\petrel.exe" "$(TargetDir)" 

Как указывает Океанский Dev Guide.

Когда я пытаюсь сделать что-то более сложное, он говорит мне, что не может найти ни одного dll и его ссылок. DLL присутствует там, где строится мой проект. Я проверил с ProcMon, и я мог видеть, что Ocean не проверял dll в этой папке.

Мне пришлось принудительно загружать сборку из определенного пути к каталогу ( используя C# - Загрузить сборку из определенного пути к каталогу). При этом плагин загружался правильно. DLL, с которой у Petrel есть проблемы, это InfragisticsWPF.DockManager.dll

Я разговаривал с другими командами, которые работают над Petrel, и некоторые из них упоминали мне, что начиная с версии 2012 года, они должны вызывать Load Assembly некоторых из своих dll, потому что Petrel не сможет их найти. Вещи, которые работали нормально в версии 2011 года. Может быть, в 2012 году произошло какое-то изменение, вызвавшее это? Мы пропускаем некоторую конфигурацию?

Обновить

По запросу, это то, что показывает Fusion Log Viewer:

Для InfragisticsWPF.DockManager.DLL он пытался получить доступ

Менеджер сборки загружен из: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll, работающего под исполняемым файлом C: \ Program Files \ Petrel 2012.3 \ petrel.exe

  • C:/Program Files/Petrel 2012.3/ и множество подкаталогов, таких как "Расширения". Похоже, что он прошел через все папки внутри C:/Program Files/Petrel 2012.3/
  • Он также пытался найти InfragisticsWPF.DockManager.EXE в тех же папках.
  • Все зондирующие URL-адреса были попытки и не удалось.

Он никогда не ищет в пути, где мой плагин. Хотя Petrel не удается загрузить InfragisticsWPF.DockManager.DLL, он не загружает другие мои библиотеки. Для других моих dll журнал выглядит точно так же, но последняя попытка проверяет папку, в которой находится мой плагин:

LOG: Attempting download of new URL 

file:///c:/myFolder/MyAssembly.DLL.
LOG: Assembly download was successful. Attempting setup of file: c:\myFolder\myAssembly.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: MyAssembly, Version=1.0.0.0, Culture=neutral
LOG: Where-ref bind Codebase does not match what is found in default context. Keep the result in LoadFrom context.
LOG: Binding succeeds. Returns assembly from c:\myFolder\myAssembly.dll.
LOG: Assembly is loaded in LoadFrom load context.

Обе библиотеки находятся рядом друг с другом, но по какой-то причине у Petrel есть проблемы с InfragisticsWPF.DockManager.DLL, а не с другими присутствующими библиотеками.

2 ответа

У нас была такая же проблема для работающего плагина. Причина в том, что установка плагина с помощью "PluginManager" больше не меняет <probing privatePath="Public;Extensions;..."/> атрибут файла petrel.exe.config. В старом способе установки плагинов в каталог Petrel (добавить модуль) к плагину был добавлен "путь поиска", в результате чего Assembly.LoadFile находил такой каталог.

Напишите тест... вручную добавьте каталог плагина в "путь поиска", и проблема будет решена. Просто пока не знаю, почему Шлюмберже сделал это изменение и есть ли более правильный способ сделать это.

Необходимо добавить путь к папке вашего плагина, который находится внутри папки petrel в pluginpackager.exe.config

Другие вопросы по тегам