1

我创建了一个基本插件,当我部署它进行开发时它运行良好:

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

正如海洋开发指南所指出的那样。

当我尝试做一些更复杂的事情时,它告诉我它找不到其中一个 dll 及其引用。dll 存在于我的项目正在构建的位置。我检查了 ProcMon,我可以看到 Ocean 没有检查该文件夹中的 dll。

我不得不强制从特定目录路径加载程序集(使用 C# - 从特定目录路径加载程序集)这样做我的插件正确加载。Petrel 遇到问题的 dll 是 InfragisticsWPF.DockManager.dll

我与正在研究 Petrel 的其他团队进行了交谈,有些人向我提到,自 2012 版本以来,他们必须强制对他们的一些 dll 进行 LoadAssembly,因为 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/ 和很多像“Extensions” 这样的子目录 看起来它遍历了 C:/Program Files/Petrel 2012.3/ 里面的所有文件夹
  • 它也尝试在相同的文件夹中搜索InfragisticsWPF.DockManager.EXE 。
  • 所有探测 URL 均已尝试但均失败。

它从不搜索我的插件所在的路径。尽管 Petrel 无法加载InfragisticsWPF.DockManager.DLL,但它不会无法加载我的任何其他 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.

两个 dll 彼此相邻,但由于某种原因,Petrel 与 InfragisticsWPF.DockManager.DLL存在问题,而其他任何 dll 都没有。

4

2 回答 2

2

对于一个有效的插件,我们遇到了同样的问题。原因是使用“PluginManager”安装插件不再更改<probing privatePath="Public;Extensions;..."/>文件petrel.exe.config的属性。在Petrel(添加模块)的插件目录中添加了“探测路径”,导致Assembly.LoadFile找到这样的目录。

写个测试……手动在“探测路径”中添加插件的目录,问题就解决了。只是还不知道斯伦贝谢为什么会做出这种改变,以及是否有更正确的方法来做到这一点。

于 2014-04-30T13:07:31.163 回答
0

需要在 pluginpackager.exe.config 的 petrel 文件夹中添加插件文件夹路径

于 2015-04-15T21:01:29.417 回答