引用SharpSVN时,IEFrame.DLL和SHLWAPI.DLL中缺少外部函数

时间:2012-02-21 19:17:46

标签: c# visual-studio-2008 .net-3.5 dependency-management sharpsvn

注意:此部分包含错误信息 - 有关详细信息,请跳至下面的更新。本节留待出于历史目的。

我在Visual Studio 2008中有一个针对.NET 3.5的WPF项目,该项目引用了SharpSVN。当我调用SvnClient.Export时,我得到一个Marshal.GetExceptionCode告诉我的异常是0xc06d007e。这似乎是由一个糟糕的DLL引起的。我已经跟踪(使用Dependency Walker)DLL到两个罪魁祸首:IEFRAME.DLL和SHLWAPI.DLL。他们缺少以下导出功能:

SHLWAPI.DLL:#270 IEFRAME.DLL:#141,#159,#160

我最初还有一个丢失的DLL,它通过将%ProgramFiles%\ Internet Explorer添加到路径来修复。我不记得DLL名称。

这是Visual Studio 2008的全新安装,SharpSVN 1.7002.1998.12257。

我可以运行SharpSVN提供的“svn”命令从我们的存储库导出,所以我倾向于解决方案/项目配置/参考问题。

如何解决此错误?


*更新:我已经完善了对这个问题的理解。 SHLWAPI和IEFRAME问题似乎是正常情况 - User32.dll具有相同的行为。我通过以下方式修改了我的环境:

环境变量[SVN_SSH]设置为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。

1 个答案:

答案 0 :(得分:2)

IEFrame和SHLWAPI的错误是将报告视为错误的正常问题,但不会导致错误。在我的情况下,错误是由在非用户界面项目中使用SharpSVN引起的。当移动到WPF项目时,它按预期工作。

我已经改变了调用命令shell“svn”应用程序以实现无UI自动化的策略。