C# CodeDom未链接主类

C# CodeDom未链接主类,c#,.net,winforms,compilation,codedom,C#,.net,Winforms,Compilation,Codedom,因此,我正在创建这个应用程序,它允许您构建一个Windows窗体应用程序,而无需使用Visual Studio构建,只需通过代码即可 如果我忘记了其他类以及主类必须对另一个类运行“Application.run();”这一事实,它就可以正常工作 我的问题是,它说: Could not find 'RunLauncher' specified for Main method 我有几个剧本。第一个是标准C#脚本,它包含运行Windows窗体C#脚本的主方法,通过。Application.Run()

因此,我正在创建这个应用程序,它允许您构建一个Windows窗体应用程序,而无需使用Visual Studio构建,只需通过代码即可

如果我忘记了其他类以及主类必须对另一个类运行“Application.run();”这一事实,它就可以正常工作

我的问题是,它说:

Could not find 'RunLauncher' specified for Main method
我有几个剧本。第一个是标准C#脚本,它包含运行Windows窗体C#脚本的主方法,通过。Application.Run()方法。此Windows形成C#脚本,然后将另一个类作为对象链接到它(在Load方法中创建),因此总共有3个脚本需要编译到新的可执行文件中

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

我几乎可以肯定,编译它并找到类的实际代码有问题,而不是这些类,但出于怀疑,我还是链接了它们:

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);
  • 新可执行文件的主类|
  • 启动程序Winform C#Class|
编译代码dom代码:

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);

问题是生成的程序集中没有名为
RunLauncher
的类。您想要的类被称为
kjpUnityGameLauncherTemplate.RunLauncher
,因此这就是您需要在
main类中设置的:

parameters.MainClass = "kjpUnityGameLauncherTemplate.RunLauncher";

它解决了上面的错误,但是,现在我仍然有一个类似的错误:您对问题的编辑显著地改变了您所问的内容,并使现有的答案无效。堆栈溢出不是这样工作的。如果你有一个新问题,那就很公平了。创建了一个新问题(与此目的基本相同),但如果这就是Stackoverflow的工作原理,我不会更改:)无论如何,感谢您的帮助。