2011-10-11 44 views
1

我在我的C#程序集上使用构建后步骤来公开我的dll函数签名。此步骤使用http://www.codeproject.com/KB/dotnet/DllExport.aspx的ExportDll工具。但是,如果我通过MSTEST运行我的DLL,并试图获得一个代码覆盖率报告,我得到以下错误:如何在ExportDll通过ildasm/ilasm运行后获取代码覆盖率?

Instrumentation error while trying to process the file MyAssembly.dll 
Error VSP1011 : Unable to obtain debug information. Link with the /Profile linker switch. 

这是奇怪的,考虑到存在大会没有非托管代码(比其他几个P /调用签名)。如果我采取后构建步骤,我的代码正确安装,我可以得到一个代码覆盖率报告。因此,我只能断定它必须是这个后构建步骤,而不是代码本身。

我在构建和分发后ExportDll版本时,倾向于通过非ExportDll版本的代码运行我的单元测试。由于我主要关心代码是否被测试,而不是其他组件可以通过DLL导出找到函数,所以我不认为这是一个糟糕的解决方案。然而,我觉得这可能是构建管理的噩梦,必须向团队解释“使用这个组件,而不是组装”。

有没有人有经验单元测试已通过此工具运行的DLL?或者是否有人有过使用ildasm/ilasm编译,反编译和重新组装的程序集的经验?

回答

0

ExportDll实用程序重写原始程序集,但它可能不会更新PDB,以便在使用ilasm重新编译时考虑新的检测。本文似乎并不认为这是可能的,但如果您使用/ pdb与ilasm切换,那么这应该会产生一个PDB,它与您新装备的组件兼容。

查看源代码,您需要将switch切换到program.cs行348,然后指示ilasm生成新的PDB。