0 0

[C#]关于WindowsForm+CSharpCodeProvider动态编译的问题10

新手刚学C#
要做一个能动态生成一个简单windowsForm的程序,用CSharpCodeProvider动态编译。
现在倒是可以生成exe了,不过生成的文件打开会有2个窗口,截图如下:



下面是动态编译部分的代码:
private void menu_export_Click(object sender, EventArgs e)
        {
            string sourceName = "MyForm.cs";
            FileInfo sourceFile = new FileInfo(sourceName);
            CSharpCodeProvider provider = new CSharpCodeProvider();

            status_content_label.Text = "Exporting ... ";

            String exeName = String.Format(@"{0}\{1}.exe", "Output/", sourceFile.Name.Replace(".", "_"));

            CompilerParameters cp = new CompilerParameters();

            cp.ReferencedAssemblies.Add("System.dll");
            cp.ReferencedAssemblies.Add("System.Drawing.dll");
            cp.ReferencedAssemblies.Add("System.Windows.Forms.dll");
            //cp.ReferencedAssemblies.Add("AxInterop.ShockwaveFlashObjects.dll");
            //cp.ReferencedAssemblies.Add("Interop.ShockwaveFlashObjects.dll");
            //cp.ReferencedAssemblies.Add("System.Data.dll");

            // Generate an executable instead of 
            // a class library.
            cp.GenerateExecutable = true;

            // Specify the assembly file name to generate.
            cp.OutputAssembly = exeName;

            // Save the assembly as a physical file.
            cp.GenerateInMemory = false;

            cp.IncludeDebugInformation = false;

            // Set whether to treat all warnings as errors.
            cp.TreatWarningsAsErrors = false;

            cp.CompilerOptions = "/optimize /win32icon:" + config.GetIconPath() + " MyForm.cs";

            // Invoke compilation of the source file.
            CompilerResults cr = provider.CompileAssemblyFromFile(cp, sourceName);

            string errorMessage;

            if (cr.Errors.Count > 0)
            {
                // Display compilation errors.
                errorMessage = "Errors building {0} into {1}" + sourceName + cr.PathToAssembly + "\n";
                foreach (CompilerError ce in cr.Errors)
                {
                    errorMessage += "  {0}" + ce.ToString() + "\n";
                }
                errorReport.ShowError(errorMessage);
                errorReport.Show();

                status_content_label.Text = "Failed to create the exe file.";
            }
            else
            {
                status_content_label.Text = "Exe file successfully created.";
            }
        }

然后是MyForm.cs,就是用来动态编译的cs:
using System;
using System.Drawing;
using System.Windows.Forms;

class MyForm : Form
{
    public MyForm()
    {
        this.Text = "Hello World";
        this.StartPosition = FormStartPosition.CenterScreen;
    }

    public static void Main()
    {
        Application.Run(new MyForm());
    }
}


有没有人能帮忙看看呢?非常感谢!!

找到答案了:
在 cp.CompilerOptions 中 加一句 /target:winexe 就可以了 默认是 Console app
http://stackoverflow.com/questions/7497493/problems-using-windowsform-and-csharpcodeprovider
话说stackoverflow回答真快
2011年9月21日 14:58
  • 大小: 98.6 KB
目前还没有答案

相关推荐

    C# wpf 动态编译脚本

    在某些应用场景下,开发者可能需要在运行时动态编译C#代码,这在WPF应用中也是完全可行的。动态编译脚本的能力为开发者提供了更大的灵活性,可以实现例如运行时更新业务逻辑、自定义用户脚本执行等功能。 在C#中,...

    C# wpf 动态编译简单代码

    在C#编程环境中,WPF(Windows Presentation Foundation)是一种用于构建桌面应用程序的UI框架,而动态编译则是C#的一项强大功能,允许程序在运行时编译和执行代码。这篇教程将带你了解如何在WPF应用中实现动态编译...

    如何用C#动态编译、执行代码

    在探讨如何使用C#动态编译与执行代码之前,首先需要理解几个关键的类及其属性和方法:`CSharpCodeProvider`、`ICodeCompiler`、`CompilerParameters`、`CompilerResults`以及`Assembly`。 #### CSharpCodeProvider ...

    C#动态编译,可以编译TXT格式的文件形成C#文件

    CSharpCodeProvider是.NET提供的一个接口,它允许我们使用C#语言进行代码的动态编译。 下面是一个简单的步骤概述: 1. **读取TXT文件**:使用StreamReader或其他文件读取方法读取TXT文件内容,将其转化为字符串...

    c#动态编译生成

    `Microsoft.CSharp.CSharpCodeProvider`是.NET框架提供的一种工具,可以用来动态编译C#源代码。以下是一个基本的使用步骤: 1. **创建源代码字符串**:首先,你需要将要编译的C#代码以字符串形式存储。 2. **设置...

    AvalonEdit文本器+NRefactory代码提示+Roslyn动态编译

    AvalonEdit文本器+NRefactory+Roslyn动态编译 1. AvalonEdit实现编写,高亮,复制,黏贴,撤回等基础功能 ...3. Roslyn实现动态编译(CSharpCodeProvider只支持Framework,Roslyn可以同时支持Framwork和netcore)

    一个C#动态编译的源代码

    标题“一个C#动态编译的源代码”暗示了这是一个关于C#动态编译的实例项目。动态编译(又称运行时编译)允许我们编写代码并在程序运行过程中即时编译和执行这段代码,而不是在程序启动前预编译所有代码。这种技术在...

    C#中动态编译应用程序C#源码

    在C#编程环境中,动态编译应用程序是一种高级技术,它允许开发者在运行时根据需要编译C#源代码。这通常用于实现自定义脚本引擎、动态加载功能或执行特定任务,而无需重新构建整个项目。本文将深入探讨C#中动态编译...

    c#动态读取代码并动态编译

    在.NET框架中,C#提供了一种强大的能力,即能够在运行时动态地读取、编译和执行代码。...不过,需要注意的是,动态编译也带来了一些潜在的风险,如安全性问题和性能开销,因此在实际应用中需谨慎使用。

    C#动态编译

    C#动态编译是C#语言的一个重要特性,它允许开发者在程序运行时编译代码,提供了极大的灵活性和便利性。这篇内容将深入探讨C#动态编译的概念、应用场景以及实现方法。 动态编译,又称JIT(Just-In-Time)编译,与...

    C# 动态编译文本框里的代码

    在C#编程环境中,动态编译是通过System.CodeDom.Compiler命名空间提供的类来实现的,这使得我们可以在程序运行时动态地创建、编译和执行源代码。这种能力对于构建小型编译器或者代码解释器非常有用,尤其适用于需要...

    c#动态生成源代码并编译

    动态编译虽然灵活,但也有潜在的安全风险,因为任何代码都可以被动态编译并执行,可能导致注入攻击。同时,频繁的动态编译会增加程序的运行时开销,因此应合理控制使用频率。 6. **Roslyn编译API** 自.NET ...

    动态编译 DynamicCompiler c#

    动态编译是编程领域中的一个重要概念,特别是在C#这样的高级编程语言中,它允许开发者在程序运行时生成、编译和执行代码。这种能力极大地提高了灵活性和效率,尤其是在处理复杂逻辑或者需要根据运行时环境调整行为的...

    C#动态脚本案例,动态编译执行代码

    3. **动态编译**:在C#中,我们可以使用`AppDomain`的`CreateInstanceAndUnwrap`方法来实例化由动态编译得到的类型,从而执行动态生成的代码。以下是一个简单的例子: ```csharp var provider = new ...

    c#动态编译

    C#动态编译是.NET框架提供的一种强大功能,它允许我们在程序运行时编译和执行代码。这种技术在很多场景下都非常有用,比如在插件系统、代码自动生成或者需要根据用户输入执行特定代码的场景。C#动态编译主要通过...

    C#代码动态编译、动态执行、动态调试.pdf

    总之,C#的动态编译、执行和调试功能极大地增强了代码的灵活性和可维护性,但也需要开发者对.NET框架有深入的理解,以充分利用这些特性并避免潜在的问题。通过合理的封装和管理,我们可以构建出更加高效、健壮的动态...

    C#动态编译并执行字符串样例

    本示例展示了如何在C#中动态编译一个包含简单方法的字符串,并调用该方法。这个过程通常用于在程序运行时根据用户的输入或配置来生成和执行代码。 首先,我们定义了一个字符串`code`,其中包含了我们要编译的C#源...

    c# 动态生成源代码并编译

    在动态编译过程中,可能会遇到语法错误、类型引用错误等。Roslyn提供了丰富的错误信息,我们可以通过检查`Diagnostic`对象来捕获并处理这些错误。 6. **应用场景** - 自定义代码生成:根据配置或运行时数据动态...

    C#+.NET+动态调用webservice的三种方式.doc

    4. **动态编译**:使用`CSharpCodeProvider`等工具将生成的代码编译成程序集。 5. **调用服务**:通过反射机制找到并调用客户端代理类中的方法。 #### 总结 通过以上步骤,我们可以实现.NET应用程序中动态调用...

    “在c#编写的软件中动态地编译新的代码”对应的源码下载

    在C#编程环境中,动态编译新的代码是一项高级特性,它允许程序在运行时创建、编译和执行新的代码段。这种技术对于实现插件架构、热更新或自定义脚本系统非常有用。本文将深入探讨如何在C#中实现这一功能,并提供一个...

Global site tag (gtag.js) - Google Analytics