我在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签名之外),这很奇怪。如果我采取后构建步骤,我的代码将正确检测,我可以获得代码覆盖率报告。因此,我只能得出结论,它必须是这个后构建步骤,而不是代码本身。
我倾向于在构建和分发post-ExportDll版本时,通过非ExportDll版本的代码运行我的单元测试。由于我主要感兴趣的是代码是否经过测试而不是其他组件可以通过DLL导出找到该函数,我不认为这是一个糟糕的解决方案。但是,我觉得它可能只是构建管理中的噩梦,并且必须向团队解释“使用此程序集,而不是程序集”。
有没有人有经验单元测试已通过此工具运行的dll?或者也许是否有人有使用ildasm / ilasm编译,反编译和重新组装的程序集的经验?
答案 0 :(得分:0)
ExportDll实用程序会重写原始程序集,但在使用ilasm重新编译时,可能不会更新PDB以考虑新的检测。文章似乎没有说这是可能的但是如果你使用/ pdb开关与ilasm,然后这将生成一个与您新装配的程序集兼容的PDB。
查看源代码,您需要将开关添加到program.cs第348行,然后指示ilasm生成新的PDB。