2011-10-11 10 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。