CompileAssemblyFromDom抛出FileNotFoundException

时间:2012-06-17 11:40:22

标签: c# .net windows visual-studio-2010 codedom

我构建一个CodeCompileUnit,下面的代码输出一个C#源代码文件,一个.dll,我可以从程序集中获取一个实例:

TextWriter tw = new IndentedTextWriter(new StreamWriter(filePath + ".cs", false), "    ");
provider.GenerateCodeFromCompileUnit(compileUnit, tw, new CodeGeneratorOptions());
tw.Close();

CompilerParameters cp = new CompilerParameters { GenerateInMemory = true, GenerateExecutable = false};
cp.ReferencedAssemblies.Add("MyProgram.exe");
cp.OutputAssembly = filePath + ".dll";
CompilerResults cr = provider.CompileAssemblyFromFile(cp, filePath + ".cs");

MyType instance = (MyType)Activator.CreateInstance(cr.CompiledAssembly.GetTypes()[0]);

到目前为止一切顺利。现在我想避免生成这些文件:

CompilerParameters cp = new CompilerParameters { GenerateInMemory = true, GenerateExecutable = false};
cp.ReferencedAssemblies.Add("MyProgram.exe");
//cp.OutputAssembly = filePath + ".dll";
CompileResults cr = provider.CompileAssemblyFromDom(cp, compileUnit);

这会抛出FileNotFoundException。它在我的\ temp文件夹中查找x32savit.dll(或类似文件),但它不存在。如果我取消注释OutputAssembly,它会在该路径上失败。

1 个答案:

答案 0 :(得分:4)

结果是命名空间错误。有一个很好的例子here

在调试时添加以下代码非常有用。

  string errorText = String.Empty;
  foreach (CompilerError compilerError in compilerResults.Errors)
      errorText += compilerError + "\n";