2015-11-03 59 views
12

我們在Asp.net MVC5中開發了一個大項目。我們的模型和業務邏輯在單獨的類庫中定義。現在我們需要爲現有項目添加另一個模塊,但我們需要一個單獨的dll。是否可以使用MVC項目製作單獨的dll?

此模塊也共享大多數javascript,css文件和其他文件。這就是我們不想分開MVC項目的原因。

是否有任何爲什麼我們可以爲模塊創建單獨的dll。所以我們不想部署或觸摸其他dll。

+0

是的,你可以有任意多的組件。 – Matthew

回答

1

是的,你可以,只需將邏輯類添加到其他類庫項目(可以有多個),然後將這些類庫的引用添加到mvc項目。 不要忘了導入你的代碼之後的類

編輯:我假設你正在使用Visual Studio,如果是的話,你可以到文件 - >新建項目,這將創造另一個項目同樣的解決方案。

6

從您的描述中可以看出,項目共享CSS和JS文件。這讓我相信你在談論一個單獨的MVC網站(可能是大型企業網站的一部分)。這可以使用區域最簡單。如果您不熟悉區域,請閱讀以下內容:https://msdn.microsoft.com/en-us/library/ee671793(VS.100).aspx

當然,使用區域需要您在每個區域發生更改時部署整個站點,並且您提到要避免這樣做。

如果您不想使用區域,而是想在同一個解決方案中創建另一個MVC項目,那麼也可以輕鬆完成。您可以右鍵單擊解決方案,添加新項目> ASP.NET Web應用程序> MVC以添加項目。要在這兩個MVC項目之間共享JS和CSS文件,您必須創建一個新的解決方案文件夾(右鍵單擊解決方案>添加新解決方案文件夾),然後將資源文件移至該文件夾。在解決方案中的每個MVC項目中,您將添加現有項目並選擇那些js/css資源文件。這樣如果你改變了css文件,它將反映在兩個項目中。

欲瞭解更多信息,請閱讀以下內容:

How do you share scripts among multiple projects in one solution?

0

我可以建議你方式來組織你的多模塊項目。

選項1 - 創建每個模塊,同一個web項目中做

的一種方法是,同樣的MVC項目中創建獨立的Area。所以每個模塊將有一個單獨的區域,具有獨立的控制器,視圖,腳本等。但是,
(1)這仍然會造成整個MVC項目單dll
(2)跨區域共享的文件可能無法很容易在某些情況下(你可以把所有的腳本都在一個共享的模塊目錄雖然)

選項2 - 創建每個模塊類庫,生成後合併

另一種方法是創建每個模塊一個class library項目。添加對System.Web.Mvc和其他庫的引用,以便它可以具有controllers等。創建您自己的視圖,腳本和其他文件夾,並根據需要填充文件。

現在,所有的模塊將建立單獨的項目,與dll文件和javasvript S,html S,css S,圖片等。爲了讓他們所有的工作作爲一個單一的web application你可以創建一個(只有一個) MVC web項目,它將轉到IIS虛擬目錄並將作爲web發佈。

要使用來自同一網站的所有獨立模塊,您可以在所有這些庫中編寫post build事件以將工件(dll,腳本等)複製到主網站中,並放入相應的文件夾(dll到\ bin,javascript到\腳本等)。因此,在成功構建之後,所有工件都可以在同一個Web項目中使用,並且可以作爲單個Web部署到所有模塊中。您的留言構建腳本應該是這個樣子

XCOPY "$(ProjectDir)$(OutDir)*.*" "$(ProjectDir)..\YourMainWebDirectory\Bin\" /Y 
XCOPY "$(ProjectDir)Content" "$(ProjectDir)..\YourMainWebDirectory\Content\" /S /Y 
XCOPY "$(ProjectDir)Scripts" "$(ProjectDir)..\YourMainWebDirectory\Scripts\" /S /Y 
XCOPY "$(ProjectDir)Views" "$(ProjectDir)..\YourMainWebDirectory\Views\" /S /Y 
XCOPY "$(ProjectDir)Images" "$(ProjectDir)..\YourMainWebDirectory\Images\" /S /Y 

現在,
(1)您有單獨的模塊單獨的DLL
(2)可直接共享腳本和其他文件,因爲它們將在同一地點(構建後)
(3)如果您決定從網絡中刪除特定模塊,只需從該模塊(項目)中刪除後構建事件,而不影響其他任何內容。您可以隨時將其添加回去。

您關於使用地區的整體solution看起來像

Module01.csproj => post build copy to main 
    \Controllers 
    \Scripts 
    \Views 
    \Contents 
    \Images 

Module02.csproj => post build copy to main 
    \Controllers 
    \Scripts 
    \Views 
    \Contents 
    \Images 

Models.csproj 
    \... 

Application.csproj 
    \... 

Main.Web.csproj => main web application hosted in IIS 
    \Controllers 
    \Scripts 
    \Views 
    \Contents 
    \Images 
0

其他人已經張貼的答案。地區非常好,很有幫助。他們確實有利於項目結構。

該模塊還分享最JavaScript的,CSS文件和其他文件

你的問題的標題是關於.DLL文件,但我懷疑客戶端資源是主要的關注。

如果你認爲你的web應用程序有兩個不同的部分:服務器端和客戶端,你可以使用適當的策略來模塊化每個部分。對於組織服務器端代碼非常有用,但對前端沒有幫助。

ASP.NET 5擴展了前端包管理選項。除了傳統的NuGet包管理器之外,現在還支持Bower和NPM。例如,考慮this article demonstrates installing jQuery via NPM。這是另一篇關於setting up NPM, Bower, and Gulp in Visual Studio的好文章。

建議操作:取出您現有的客戶端代碼並製作自定義的NPM或Bower軟件包,然後從一個或多個Asp.NET項目中使用該軟件包。

相關問題