我有一個演示項目,它創建一個程序集並使用它。我也可以調試注入的代碼。但是,如果我運行覆蓋,分析或分析,它會被計算,但我想測量它。動態生成代碼的代碼覆蓋率,分析和性能分析
代碼:
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
ICodeCompiler icc = codeProvider.CreateCompiler();
CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = false; // debug enabled
parameters.OutputAssembly = "DynamicCode.dll"; // if specified creates the DLL
parameters.IncludeDebugInformation = true;
CompilerResults results = icc.CompileAssemblyFromFile(parameters, "InjectedCode.cs.txt");
我創建DLL來檢查所生成的IL代碼。我可以在VS中調試代碼。但是當我運行覆蓋時,如果我使用TEMP目錄,或者如果我輸出DLL(如上所述),那麼生成的程序集就會錯過,而且覆蓋範圍內沒有FILE(甚至不包括主程序集)。
當我運行分析時,我只能看到調用(反射),但沒有關於生成的代碼。當我進行分析時(我在注入的代碼中有一些錯誤,例如沒有使用過的本地代碼,以及對所有東西都進行了分析),注入的代碼沒有報告任何問題。注入的代碼:
namespace CodeInjection
{
public static class DynConcatenateString
{
public static string Concatenate(string s1, string s2){
// System.Diagnostics.Debugger.Break(); // break here for debugger and also test comment output
int a = 1+2+3+4+5; // complicated math
int b = a+2;
int c = 0;
return s1 + " !"+b+"! " + s2;
}
}
}
我想對生成的代碼(主要是覆蓋率)使用coverage,分析和分析。
也跳過了(這是我跳過代碼覆蓋後的第一次嘗試)。此外jetbrains封面和其他工具錯過。現在我正在更深入地討論這個話題,希望下週會有結果,所以我會寄到這裏。請評價我的問題,不管你認爲它是否有用。 – cseppento