2013-10-29 135 views
0

我試圖創建一個Windows窗體應用程序,它可以創建另一個Windows窗體應用程序。但是當我試圖用CodeDom在C#代碼中編譯時出現的錯誤是一個奇怪的問題。找不到合適的主要方法

'kjpUnityGameLauncherTemplate.RunLauncher' does not have a suitable static Main method 

這有點讓我困惑,因爲類「RunLauncher」確實有一個主要的方法,用在(http://msdn.microsoft.com/)的網站中描述的默認設置。http://pastebin.com/NU3VYwpv(其具有的主要方法)

代碼我使用通過實際編譯此:

RunLauncher類。 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」等的申報,但這些都不是在這種情況下,這就是爲什麼我不包括他們的問題。

+0

從MSDN的例子中,我假設這是你的第一個C#Windows窗體應用程序? – Goober

+1

向我們展示您生成的源代碼或生成Main()方法的代碼。 – SLaks

+0

不,窗口窗體應用程序編譯新窗口窗體應用程序作爲一個新的.exe工程。這就是我在第一個應用程序上單擊按鈕的部分,使用上面的「編譯代碼」,並使用新的Main Class作爲新應用程序。所以我基本上有2個主類,一個只通過代碼影響生成的類。 –

回答

1

要創建一個可執行文件您的代碼必須聲明一個入口點方法,並且正確設置爲在CodeDom中運行。我在上面的例子中沒有看到一個聲明。下面我位於

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

我明白了,但是沒有更多的「自動化」編寫主要類的方法嗎?而不是我不得不寫很多的CodeMethodInvokeExpressions。 你有可能,舉個例子,用我上面的例子? –

相關問題