我在我的 C# 程序集上使用构建后步骤来公开我的 dll 中的函数签名。此步骤使用http://www.codeproject.com/KB/dotnet/DllExport.aspx中的 ExportDll 工具。但是,如果我通过 mstest 运行我的 dll 并尝试获取代码覆盖率报告,则会收到以下错误:
Instrumentation error while trying to process the file MyAssembly.dll
Error VSP1011 : Unable to obtain debug information. Link with the /Profile linker switch.
考虑到程序集中没有非托管代码(除了一些 P/Invoke 签名),这很奇怪。如果我采取构建后步骤,我的代码会被正确检测,并且我可以获得代码覆盖率报告。因此,我只能得出结论,它一定是这个后期构建步骤,而不是代码本身的东西。
我倾向于通过代码的非ExportDll 版本运行我的单元测试,同时构建和分发post-ExportDll 版本。由于我主要关心的是代码是否经过测试,而不是其他组件是否可以通过 DLL 导出找到该函数,因此我不认为这是一个糟糕的解决方案。但是,我觉得这可能是构建管理中的一场噩梦,不得不向团队解释“使用这个程序集,而不是那个程序集”。
有没有人有过对已通过此工具运行的 dll 进行单元测试的经验?或者,也许有人有使用 ildasm/ilasm 对已编译、反编译和重新组装的程序集进行检测的经验?