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のコメントを外すと、同じように失敗しますが、そのパス上にあります。