开发期间的部署无法找到dll及其引用

时间:2013-06-06 18:12:43

标签: ocean petrel

我创建了一个基本插件,当我使用以下代码进行开发时,它运行良好:

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。

我不得不从特定的目录路径(using C# - Load Assembly from Specific Directory Path)强制加载程序集 这样做我的插件正确加载。 Petrel遇到问题的方法是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
  • 所有探测网址都已尝试失败。

它永远不会搜索我的插件所在的路径。 尽管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存在。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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