Развертывание при разработке не может найти 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