引用SharpSVN时,IEFrame.DLL和SHLWAPI.DLL中缺少外部函数
本文关键字:DLL 函数 外部 SHLWAPI SharpSVN IEFrame 引用 | 更新日期: 2023-09-27 18:25:32
注意:本节包含不正确的信息-有关详细信息,请跳到下面的更新。出于历史目的,保留了此部分。
我在VisualStudio2008中有一个WPF项目,目标是引用SharpSVN的.NET3.5。当我调用SvnClient.Export时,我得到一个异常,Marshal.GetExceptionCode告诉我是0xc06d007e。这似乎是由一个坏的DLL引起的。我已经(使用Dependency Walker)将该DLL跟踪到两个罪魁祸首:IEFRAME.DLL和SHLWAPI.DLL。它们缺少以下导出函数:
SHLWAPI.DLL:#270IEFRAME.DLL:#141、#159、#160
我最初也有一个丢失的DLL,通过将%ProgramFiles%''Internet Explorer添加到路径中修复了它。我记不起DLL名称了。
这是Visual Studio 2008 SharpSVN 1.7002.1998.12257的新安装。
我可以运行SharpSVN提供的"svn"命令从我们的存储库中导出,所以我倾向于解决方案/项目配置/参考问题。
如何修复此错误?
*更新:我已经完善了对这个问题的理解。SHLWAPI和IEFRAME问题似乎是正常情况-User32.dll具有相同的行为。我通过以下方式修改了我的环境:
环境变量[SVN_SH]设置为TortoisePlink[C:''Program Files''TortoiseSVN''bin''TortoisePlink.exe]
已更新uri目标以使用当前用户名:
SvnUriTarget uriTarget =
new SvnUriTarget("svn+ssh://" + Environment.UserName + "@myserver/mypath");
有了这个配置,我可以在作为WPF应用程序的一部分运行此代码时成功导出。然而,当作为MSTest项目的一部分运行时,我仍然会遇到错误。
System.Runtime.InteropServices.SEHException: External component has thrown an exception.'r'n
at svn_client_export5(Int32* , SByte* , SByte* , svn_opt_revision_t* , svn_opt_revision_t* , Int32 , Int32 , Int32 , svn_depth_t , SByte* , svn_client_ctx_t* , apr_pool_t* )'r'n
at SharpSvn.SvnClient.Export(SvnTarget from, String toPath, SvnExportArgs args, SvnUpdateResult& result) in g:''dist''src''sharpsvn''commands''export.cpp:line 100
at SharpSvn.SvnClient.Export(SvnTarget from, String toPath, SvnExportArgs args) in g:''dist''src''sharpsvn''commands''export.cpp:line 66
at SimulationManager.Model.SubversionInterface.Export() in C:''Users''phines''Documents''Projects''SimulationManager''SimulationManager''SimulationManager''Model''SubversionInterface.cs:line 43
我怀疑这是由于对表示框架的依赖,但我仍然想知道是否有一种方法可以让它以无GUI的方式工作。
IEFrame和SHLWAPI的错误是正常问题,依赖于作为错误的报告,但不会直接导致错误。在我的案例中,错误是由在非用户界面项目中使用SharpSVN引起的。当转移到WPF项目时,它如预期的那样工作。
我改变了策略,将命令shell称为"svn"应用程序,以实现无UI的自动化。