我正在尝试创建一个 Windows 窗体应用程序,它可以创建另一个 Windows 窗体应用程序。但是当我尝试在 C# 代码中使用 CodeDom 进行编译时遇到的错误是一个奇怪的错误。
'kjpUnityGameLauncherTemplate.RunLauncher' does not have a suitable static Main method
这有点让我困惑,因为“RunLauncher”类确实有一个 main 方法,其默认设置在 (http://msdn.microsoft.com/) 站点中进行了描述。
RunLauncher 类: http://pastebin.com/NU3VYwpv(有 main 方法)
我用来实际编译此via的代码。 CodeDom 是这样的:
if (codeProvider.Supports(GeneratorSupport.EntryPointMethod))
{
parameters.MainClass = "kjpUnityGameLauncherTemplate.RunLauncher";
}
CodeCompileUnit compileUnits = new CodeCompileUnit();
CodeNamespace nsp = new CodeNamespace("kjpUnityGameLauncherTemplate");
parameters.CompilerOptions = "/main:kjpUnityGameLauncherTemplate.RunLauncher";
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);
nsp.Imports.Add(new CodeNamespaceImport("kjpUnityGameLauncherTemplate"));
compileUnits.Namespaces.Add(nsp);
CompilerResults results = icc.CompileAssemblyFromDom(parameters, compileUnits);
还有一些其他东西,例如变量“codeProvider”的声明等,但在本例中这些不是问题,这就是为什么我没有包含它们。
创建可执行文件 您的代码必须声明入口点方法并正确设置才能在 CodeDom 中运行。我在上面的示例中没有看到声明。下面我有一个来自 MSDN 的示例,位于
http://msdn.microsoft.com/en-us/library/y2k85ax6.aspx
CodeEntryPointMethod start = new CodeEntryPointMethod();
CodeMethodInvokeExpression cs1 = new CodeMethodInvokeExpression(
new CodeTypeReferenceExpression("System.Console"),
"WriteLine", new CodePrimitiveExpression("Hello World!"));
start.Statements.Add(cs1);