2014-06-12 47 views
2

我們有一個擁有大量動態業務應用程序頁面的企業網站(例如購物車,服務檯,產品/服務管理,報表等)。該網站的構建爲ASP.Net Web Application Project(WAP)。多年來,我們的系統已經發展到使用.NET 4.5和各種自定義業務邏輯DLL(用C#和VB.NET混合編寫)。但是,該網站本身仍在使用VB.NET Web窗體。我們現在已經使用Razor/C#在MVC 4中完成了一些項目,我們希望將這個框架用於未來主要企業網站上的新頁面。最簡單的方法是什麼?如何將新的MVC C#項目與現有的Web窗體VB.NET Web應用程序項目集成?

  • 我發現這個不錯的清單steps to integrate MVC 4 into an existing Web Forms app。問題是,因爲我們現有的應用程序是一個VB.NET WAP,它編譯成一個DLL,並且每個DLL只允許一種語言。該網站對我們來說太大了,無法一次性將其轉換爲C#(是的,我已經看過轉換工具,它們很好,但即使99%的準確性也會給我們帶來大量的清理工作。 )
  • 我曾考慮過將現有的WAP轉換爲網站項目(WSP)which does allow mixing languages,然後按照上述步驟進行操作,但在幾頁Google搜索結果後,我找不到任何將WAP轉換爲WSP的步驟。 (很多站點都提供了相反的步驟:將WSP轉換爲WAP。)
  • 我的另一個想法是創建一個完全獨立的MVC項目,然後將它們一起擠壓到相同的文件夾結構中,在那裏他們將共享bin文件夾,但編譯來分離DLL的。我不知道這是否可能,因爲某些文件會碰撞(例如Global.asax,web.config等)
  • 最後,我可以想象一個妥協解決方案,我們將所有MVC的東西保存在它自己的獨立應用程序中在主要解決方案的子文件夾下。我們已經使用了我們自己的自定義會話狀態解決方案,因此在舊網站和新網頁之間傳遞數據並不困難。

您認爲以上哪個想法對我們最有意義?有沒有另一種解決方案,我錯過了?

+1

我想,你煮熟了。首先,將WAP轉換爲WSP是最糟糕的想法。是的,您可以在同一個項目中使用「WebForms」和「MVC」。當然不是,而是一般。您創建proj作爲WAP,然後引用MVC庫。然後轉到'proj'文件並添加模板ID。這樣你就擁有了MVC項目的全部功能。但在你的情況下,你使用2種不同的語言。您可以將這些作爲親子應用程序運行。谷歌關於如何設置父子asp.net應用程序。在父母 - 孩子中,他們可以擁有兩種不同的語言,但共享相同的安全等。 –

+0

有了父母子女,您也可以運行不同版本的.net。只需要一些額外的配置。閱讀ASP.NET 4子應用程序無法在ASP.NET 2.0或ASP.NET 3.5應用程序下啓動時:http://www.asp.net/whitepapers/aspnet4/breaking-changes –

+0

這聽起來基本上就像我列出的第4個選項。對我們來說可能是最痛苦的。謝謝,我會閱讀兒童申請。 –

回答

1

經過一些調查研究和實驗(並感謝來自TS建議)我已經把範圍縮小到無論是2或4選項從我最初的問題:

  1. 轉換我們的WAP的WSP,然後按照步驟將MVC整合到網站中。我沒有看到從WAP移動到WSP是一個完整的步驟。正如MSDN鏈接所解釋的那樣,性能不會受到影響,主要是如何調整構建/部署過程的問題。這種技術的主要優點是它允許多種語言共存於同一個項目和根文件夾中。某些文件(如Global.aspx.vb)必須保留在VB.NET中。但是特定的文件夾和網頁可以被指定爲C#。我們的缺點是我們的網站有很多使用舊式服務器端的遺留頁面 - 包括ASPX頁面片段,並且這些會導致WSP中的構建錯誤。這些必須更改爲用戶控件,或者可能重命名爲無法識別的擴展名,例如.aspxinclude,以便它們不包含在構建中。
  2. 創建一個MVC子應用程序作爲一個新的.NET項目(請參閱http://support.microsoft.com/kb/307467)。父級web.config需要<system.web>部分包裝<location path="." inheritInChildApplications="false">,並且新應用程序的子文件夾需要通過IIS管理器轉換爲應用程序。子應用程序可以是使用不同默認語言(C#vs VB.NET)的WAP。這使得從現有項目中分離出來更容易。但是這也是一個缺點,因爲MVC路由只適用於子應用程序子文件夾中的URL。因此,如果我們希望我們網站的多個部分使用MVC路由,則需要單獨的子項目,例如, (/ cart,/ myaccount等)

我們可能會沿着選項#1的路徑轉換爲WSP,如果遇到很大的障礙,則只能使用#2。


更新:我能夠做到用技術#1的轉換。現在已經工作了好幾個月,所以我用我遵循的程序發佈了一個blog post

-1

你有3個選擇這裏:

  1. 轉換從VB的ASP.NET Web表單到C#
  2. 轉換你的MVC 4用C#編寫到VB。
  3. 再開發在ASP.NET Web表單所有的舊應用程序來MVC 4(難看,但爲了更好的未來變化)

我的建議是讓他們diferent項目只分享你的業務邏輯。並在同一個解決方案文件中。

+0

不好選擇 –

+0

我沒有說美麗和簡單的選擇。有時你必須忍受隧道盡頭的光線。 – mijail

+1

應用程序遷移是痛苦的,到處都是問題。 – mijail

0

想出了一個非常簡單的解決方案。

  1. 創建新的MVC的C#項目
  2. 老VB項目添加到解決方案。
  3. 移動VB aspx頁面到新的C#項目
  4. REMOVE背後屬性的代碼FROM THE VB PAGES如...代碼隱藏= 「ProductDetails.aspx.vb」 的第一行(這是魔法)
  5. 一個參考VB項目添加在C#項目
  6. 這會爲母版頁的工作以及

奇怪的VB aspx頁面「只要找到」從參考代碼隱藏和C#項目似乎並不關心VB的aspx頁面。

去圖!

希望我救了人一些時間。我在這上面花了很多時間。

+0

糾正我,如果我錯了,但不是這種技術把應用程序放在一個子文件夾,而不是根?如果目標是實現無縫轉換,並且只需在現有站點的URL結構中允許新的MVC頁面,則這可能是不可接受的。 –

+0

另外,請記住,根據現有VB.NET Web應用程序項目的複雜性,您可能必須處理非頁面類文件,頁面間引用和.asmx Web服務,這些服務會帶來特殊的轉換挑戰。這些在我在http://blog.webnames.ca/updating-vb-net-asp-net-web-application-project-support-c-mvc/上開發的過程中得到解決。 –

+0

你有一個應用程序(MVC應用程序)。 VB頁面被複制到該應用程序(不帶代碼)。然後,您可以按原樣使用它們,或者在我的情況下,使用jquery加載到div和新的MVC頁面中,將特徵添加到頁面中 –

相關問題