当前位置: 首页 > 编程语言 > C#

如何以编程方式检查C ++ DLL文件和C#DLL文件以获取对调试DLLS的引用,以自动执行测试过程分享

时间:2023-04-10 21:43:15 C#

C#学习教程:如何以编程方式检查C++DLL文件和C#DLL文件以获取对调试DLLS的引用以自动化测试过程测试过程我已经多次遇到这个问题并且需要它是一种自动化的方式:我有多个DLL文件,这些文件通常是使用多个项目/Change构建的。我创建了一个C#应用程序来检测DLL文件是否存在,如果存在则警告操作员并终止该程序。在这个C#应用程序中,我希望它也检查它是否是一个“调试”构建-换句话说,如果它在最终用户计算机上运行它会崩溃。现在我一直在寻找高低,并找到了一些可能的解决方案,但他们都失败了。Assembly.LoadFrom(string)不适用于非托管代码。我可以用它来测试托管DLL文件,但不能测试C++文件。我想我可以使用DependencyWalker或类似的东西在我的应用程序中运行,为我提供程序集引用的数据,不幸的是depends.exe控制台只输出到一个文件(然后我必须在每个文件中运行)文件和为我的数据解析它(非常密集,而且我必须在我的项目中包含depends.exe和DLL文件),而且,它似乎没有输出我真正想要的数据(或者至少我做不到)它)。也试过dumpbin,但我似乎无法让它在我的机器上运行。我还找到了一些链接,这些链接应该给我DependencyWalker的源代码。不幸的是他们都死了。我认为这不是一件难事,但无论出于何种原因,我都无法弄清楚如何使其自动化。一些源链接对我有帮助,但没有一个解决非托管程序集数据的问题。如果您知道所有DLL的名称(例如,因为您运行了DependencyWalker),您可以使用LoadLibrary检查非托管DLL。[DllImport("kernel32.dll")]staticexternIntPtrLoadLibrary(stringdllToLoad);[DllImport("kernel32.dll")]staticexternIntPtrLoadLibraryEx(stringlpFileName,IntPtrhFile,uintdwFlags);constUInt32DONT_RESOLVE_DLL_REconstUInt32LOAD_LIBRARY_AS_DATAFILE=0x00000002;constUInt32LOAD_WITH_ALTERED_SEARCH_PATH=0x00000008;[DllImport("kernel32.dll")]staticexternboolFreeLibrary(IntPtrhModule);[DllImport("kernel32.dll")]staticexternUInt32GetLastError();voidCheckUnmanagedDll(stringDllName){IntPtrhModule=LoadLibrary(DllName);if(hModule.Equals(IntPtr.Zero))MessageBox.Show("找不到"+DllName);免费图书馆(hModule);}使用GetModuleHandle检查是否有给定名称的DLL。如果您想知道它是否是调试版本,那么您需要将该信息编译到EXE中并以某种方式进行检查。“调试”与“发布”不是PE格式中内置的概念;它只是一组编译选项。许多人在版本信息中放置一个标志以指示它是内部版本还是公开版本。P/InvokeGetModuleHandle参考以上是C#学习教程:HowtoprogrammaticallyinspectC++DLLfilesandC#DLLfilesforreferencestodebugDLLStoautomatethetestingprocess.有用,需要了解更多C#学习教程,希望大家多多关注—本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: