CodeDom没有链接主类

时间:2013-10-29 01:47:33

标签: c# .net winforms compilation codedom

因此,我正在创建此应用程序,它允许您构建Windows窗体应用程序,而无需使用Visual Studio Build,而只需通过代码完成。

如果我忘记了其他类以及主类必须运行" Application.Run();"到另一个班级。

我的问题是,它说:

Could not find 'RunLauncher' specified for Main method

我有几个脚本。第一个是标准的C#Script,它包含Main方法,用于运行Windows Form C#Script,via。 Application.Run()方法。这个Windows窗体C#脚本,然后有另一个类作为对象链接到它(在Load方法中创建),所以总共有3个脚本,需要编译成新的可执行文件。

运行方法Application.Run()以运行Windows窗体应用程序的主类" RunLauncher"运行Launcher类,如下所示。

我几乎是肯定的,编译它并找到类的实际代码有问题,而不是这些类,但为了怀疑,我还是将它们联系在一起:< /强>

编译CodeDom代码:

CSharpCodeProvider codeProvider = new CSharpCodeProvider();
ICodeCompiler icc = codeProvider.CreateCompiler();
string Output = game_filename.Text + ".exe";
Button ButtonObject = (Button)sender;


System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = true;
parameters.OutputAssembly = Output;

parameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
parameters.ReferencedAssemblies.Add("System.dll");
parameters.ReferencedAssemblies.Add("System.IO.Compression.dll");
parameters.ReferencedAssemblies.Add("System.IO.Compression.FileSystem.dll");

if (codeProvider.Supports(GeneratorSupport.EntryPointMethod))
{
    parameters.MainClass = "RunLauncher";
}

CodeCompileUnit compileUnits = new CodeCompileUnit();
CodeNamespace nsp = new CodeNamespace("kjpUnityGameLauncherTemplate");

compileUnits.Namespaces.Add(nsp);
nsp.Imports.Add(new CodeNamespaceImport("kjpUnityGameLauncherTemplate"));

CodeTypeDeclaration class1 = new CodeTypeDeclaration("RunLauncher");
nsp.Types.Add(class1);

CodeTypeDeclaration class2 = new CodeTypeDeclaration("kjpUnityGameLauncher");
nsp.Types.Add(class2);

CodeTypeDeclaration class3 = new CodeTypeDeclaration("Launcher");
nsp.Types.Add(class3);

CompilerResults results = icc.CompileAssemblyFromDom(parameters, compileUnits);

1 个答案:

答案 0 :(得分:0)

问题是生成的程序集中没有名为RunLauncher的类。您想要的课程名为kjpUnityGameLauncherTemplate.RunLauncher,因此您需要在MainClass处设置:

parameters.MainClass = "kjpUnityGameLauncherTemplate.RunLauncher";