CodeDom - 无法找到csc.exe

时间:2016-05-26 06:24:13

标签: c# wpf dll codedom

我正在使用CodeDom在我的wpf应用程序中动态生成.dll。 (C#代码嵌入在xaml标记中)。我遇到了一些未找到的程序集的问题。

如果我没有指定编译器版本,它就无法找到" WindowsBase.dll"," PresentationFramework.dll"和#34; PresentationCore.dll"。我可以通过指定文件的完整路径来解决这个问题,但我觉得这不是一个合适的修复方法。如果我指定编译器版本,我不会在尝试查找程序集时遇到任何错误,但是我收到此错误 "异常= System.InvalidOperationException:无法找到编译器可执行文件csc.exe"

这看起来很奇怪,因为代码dom应该能够调用csc.exe进行编译。我需要指定另一个参数吗?

以下是我正在使用的代码。

            Dictionary<string, string> provOptions = new Dictionary<string, string>();
            provOptions.Add("CompilerVersion", "v4.6");
            CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp", provOptions);

            CompilerParameters cp = new CompilerParameters();
            cp.ReferencedAssemblies.Add("system.dll");
            cp.ReferencedAssemblies.Add("system.xml.dll");
            cp.ReferencedAssemblies.Add("system.data.dll");
            cp.ReferencedAssemblies.Add("system.windows.dll");
            cp.ReferencedAssemblies.Add("system.xaml.dll");
            cp.ReferencedAssemblies.Add("PresentationFramework.dll");
            cp.ReferencedAssemblies.Add("WindowsBase.dll");
            cp.ReferencedAssemblies.Add("PresentationCore.dll");

            cp.CompilerOptions = "/t:library";
            cp.GenerateInMemory = true;

            StringBuilder sb = new StringBuilder("");
            sb.Append(expression);

            CompilerResults cr = provider.CompileAssemblyFromSource(cp, sb.ToString());

0 个答案:

没有答案