2012-03-10 24 views
1

我想重寫一個當前在C#中用作Windows GUI的應用程序。問題是,它在Windows上運行良好,但由於Mono的GUI問題,不適用於Mac和Linux。將C#Windows GUI移植到C#web應用程序中:如何讓Win,Mac和Linux的開箱即用?

所以我的想法是繼續使用C#(因爲需要運行C#的基本子程序,因此需要運行C#並且無法移植),並嘗試將其重寫爲Web應用程序,任何Windows,Mac或Linux用戶都可以輕鬆訪問並使其工作。

我的應用程序仍然「開箱即用」,因爲它的目標是高可訪問性也很重要。

我尋找解決方案,如:

  • KayakHTTP但它不支持POST數據! (需要一個網頁圖形用戶界面)
  • 來自Mono的XSP2並製作了一個ASP.NET MVC網絡應用程序,但是它真的可以與我的網絡應用程序一起製作一個開箱即用的應用程序嗎?

另外,你有任何其他想法讓我有一個C#Web應用程序開箱即用的最終用戶?唯一需要的是在Mac和Linux上安裝Mono。

非常感謝您的幫助。

編輯1:我意識到我沒有正確解釋所有方面。事實上,有2個應用程序在我的項目:

  • 這是寫在C#和太大而被移植或重寫,因此必須使用單在Mac和Linux
  • 我的GUI運行核心應用應用程序中使用Windows窗體這是寫在C#也控制核心應用

我的目標是我的GUI應用程序轉換成Web應用程序的應用程序,所以沒有更多的Windows窗體在Mac和Linux GUI麻煩。

+1

構建3個guis只需要少一些工作。給你一個保持簡單的動力... – 2012-03-10 17:30:04

+0

我不明白你的觀點。所有三種操作系統都有適合的瀏覽器。一個Web應用程序甚至不需要在客戶端安裝任何東西(除了一些花哨的東西flash或Silverlight或Java運行時)。而服務器端(非客戶端部分)大部分時間問題少得多。 – Sascha 2012-03-10 18:17:44

+0

我編輯了我的帖子,實際上有一個我不能修改的CORE應用程序,因爲它太大而無法更改。此CORE應用程序由我的GUI應用程序控制,該應用程序需要在所有操作系統上運行。 – virrea 2012-03-10 18:35:53

回答

1

您的核心應用程序是否需要在客戶端上運行?

如果不是,則最好的方法是將所有內容都重寫爲即將在Windows服務器上運行的Web(ASP.NET)應用程序。所有目標平臺上的用戶將通過Web瀏覽器訪問此應用程序。

如果是,那麼Web應用程序不是一個好主意。你真的不想在你的客戶端上需要Web服務器。你有兩種可能性:

  • 看看可用的GUI toolkits爲單聲道,並選擇一個可用在您所有的目標平臺,以避免不同前爲您的每個平臺結束。
  • 爲了確保所有平臺上的最佳用戶體驗,您應該爲每個平臺選擇本地GUI工具包,併爲它們編寫不同的前端:只要您的核心應用程序具有接口,就可以使用Mono或使用本機開發環境可以從它訪問(例如命令行或類似的)。
+0

感謝您的回答。在閱讀GUI工具包的Mono頁面之後,如果我理解的很好,我可以繼續使用System.Windows.Forms,同時確保使用Mono Migration Analyzer之類的工具支持它。另外,我真的只想使用一個GUI工具包來保持較低的開發時間和精力。 – virrea 2012-03-10 19:24:38

+0

@virrea沒錯。如果您根據本地調用不使用第三方控件,那麼您的WinForms UI將很有可能在Mono上運行。如果沒有,你可能需要一些努力和改變來移植它。我知道至少一個WinForms應用程序的成功端口給Mono。 [Here](http://www.mono-project.com/Winforms_Samples)也是一些適用於Mono的WinForms應用程序。 – 2012-03-11 05:11:35

+0

謝謝我會看看這些樣本,並在每個平臺上試用。 – virrea 2012-03-12 11:47:23

0

這是一個重複的問題,但我沒有時間查找重複。

簡而言之,答案是:不要這樣做。您無法將桌面應用程序一對一地轉換爲Web應用程序:這兩個範例太不同了。

我建議改爲重構當前的應用程序以刪除GUI上的所有依賴項。然後,編寫一個全新的Web應用程序以滿足需求,並讓Web應用程序調用您從桌面應用程序重構的代碼。

請注意兩個平臺之間的巨大隱藏差異:Web應用程序將在服務器上運行。它將被多個用戶同時使用,同時被多個線程使用。當你重構時,一定要注意任何對差異敏感的代碼。例如,現在使用static成員字段的代碼可以在桌面應用程序中工作,因爲一次只有一個用戶。在一個Web應用程序中,所有用戶和所有線程將共享該static

這可能不是你想到的。

相關問題