我們在Asp.net MVC5中開發了一個大項目。我們的模型和業務邏輯在單獨的類庫中定義。現在我們需要爲現有項目添加另一個模塊,但我們需要一個單獨的dll。是否可以使用MVC項目製作單獨的dll?
此模塊也共享大多數javascript,css文件和其他文件。這就是我們不想分開MVC項目的原因。
是否有任何爲什麼我們可以爲模塊創建單獨的dll。所以我們不想部署或觸摸其他dll。
我們在Asp.net MVC5中開發了一個大項目。我們的模型和業務邏輯在單獨的類庫中定義。現在我們需要爲現有項目添加另一個模塊,但我們需要一個單獨的dll。是否可以使用MVC項目製作單獨的dll?
此模塊也共享大多數javascript,css文件和其他文件。這就是我們不想分開MVC項目的原因。
是否有任何爲什麼我們可以爲模塊創建單獨的dll。所以我們不想部署或觸摸其他dll。
是的,你可以,只需將邏輯類添加到其他類庫項目(可以有多個),然後將這些類庫的引用添加到mvc項目。 不要忘了導入你的代碼之後的類
編輯:我假設你正在使用Visual Studio,如果是的話,你可以到文件 - >新建項目,這將創造另一個項目同樣的解決方案。
從您的描述中可以看出,項目共享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?
我可以建議你方式來組織你的多模塊項目。
選項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
其他人已經張貼的答案。地區非常好,很有幫助。他們確實有利於項目結構。
該模塊還分享最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項目中使用該軟件包。
是的,你可以有任意多的組件。 – Matthew