1

我在我的 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 对已编译、反编译和重新组装的程序集进行检测的经验?

4

1 回答 1

0

ExportDll 实用程序重写了原始程序集,但它可能没有更新 PDB 以在使用ilasm重新编译时考虑新的检测。文章似乎没有说这是可能的,但是如果您使用 /pdb 开关与 ilasm ,那么这应该会生成一个与您新检测的程序集兼容的 PDB。

查看源代码,您需要将开关添加到 program.cs 第 348 行,以便随后指示 ilasm 生成新的 PDB。

于 2012-02-21T21:24:43.130 回答