我有一个演示项目,它创建一个程序集并使用它。我也可以调试注入的代码。但是如果我运行覆盖率、分析或者性能测试,虽然会计算,但我想测量它。
代码:
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代码。我可以在Visual Studio中调试代码。但是当我运行覆盖率测试时,无论是使用TEMP目录还是输出DLL(如上所述),生成的程序集都会被忽略,而且没有任何文件包括在覆盖范围内(即连主要程序集也没有)。当我运行分析时,我只能看到调用(反射)信息,但是没有关于生成代码的内容。当我进行分析时(注入代码中有一些错误,例如未使用局部变量等),注入的代码并没有报告任何问题。注入的代码: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;
}
}
}
我希望在生成的代码上使用覆盖率、分析和性能剖析(主要是覆盖率)。