VS中的Solution是什麼意思?

之前一直做java項目,生活所迫,現在開始做.net項目,一直不太理解Solution是什麼意思,微軟為什麼要有一個Solution的概念呢?我現在的理解是,類似於Maven中的pom這一級的父項目文件夾,不知道對不對(後來補充:貌似這個理解是對的)

~~~~~~~~~~~~~~~~~

最後一次更新:我認真地看了所有人的回答和評論以及各位的更新。有些回答說Solution和Eclipse的Workspace很像,可能是開發習慣不
同,導致現實中Solution和Workspace的功能一點都不像。。。我不知道Eclipse提出Workspace是不是為了和Solution
一樣的作用,但是因為早期很多java的項目就是一個獨立的project,無論多大,都不會根據功能模塊去拆分成不同的project,導
致了很多人只有一個Workspace,裡面的project也是沒有任何關係的(就好像一個人只有一個Solution,無論什麼項目都是直接往裡
面放)。

直到後來終於有人受不了了,從Ant到Maven之後,java開發人員才漸漸有創建項目的時候新建一個大文件夾,有關於此項目的所有一堆相關的
project、測試、文檔按照一定的目錄結構放到這個文件夾下的習慣(是不是跟好多人對Solution的形容很像)。第一次接觸到Solution的
時候,我很自然的按照之前開發的習慣去認為:一個Solution的功能和一個Maven結構項目的根文件夾一樣的功能。但是,Solution作為VS
的概念,應該是和Eclipse的Workspace相對應的,可是結合之前所說,反而Solution的功能卻更像是Maven結構下的根文件夾。。。
或許這是因為這一套都是微軟所創立的,之間的關係結合的比較緊密吧。。。

~~~~~~~~~~~~~~~~~

最後還是要黑一下微軟,為什麼VS都沒有go to anywhere的功能!還得我買一個ReSharper!!合夥坑錢的節奏嗎!!!


Solution不僅僅是Project Group,儘管他最大的作用就是這個。

Solution是你開發中所需要用到的所有東西的集合和一個管理器,例如項目、文檔、測試用例、源代碼管理、第三方類庫,全都可以整合在Solution裡面,非常方便。

項目的整合就不說了,擁有依賴關係的項目在同一個Solution裡面就可以自動級聯編譯,而且是增量編譯的。單元測試,除了解決項目依賴之外,在Solution裡面的時候,關聯項目編譯的時候單元測試就會自動運行。在調試的時候,Solution裡面的項目都會被自動載入到調試器,便於進行源代碼調試。Solution可以用文件夾分組項目,也可以存放項目文檔。


解決方案,就是一個或多個項目的集合


解決方案的意思,可以看做是多個關聯項目的鏈接器。

解決方案把多個相關聯的項目通過sln文件關聯起來,記錄項目地址方便開發者。

一個解決方案可以有多個項目,項目可以單獨生成,此時解決方案並不會更新,需要你重新生成來掛上新的項目的鏈接。

確實比Java文件夾高明不知哪裡去了(????ω????)。


比Eclipse專門開一個文件夾管理各種項目的元屬性不知道高明到哪裡去了。


說點不一樣的。千萬別用solution 來組織整個系統的項目並用其來編譯。用來組織自己的項目,讓它們靜靜躺在自己硬碟上。血的教訓,一言難盡


簡單理解就是workspace。工作台。.net叫做解決方案。

簡單區分來說,java類似於一個人做了很多項目,都放在一個桌子上面。(假設這個人沒有多個workspace切換的習慣。)。而net就是這個人做了很多東西,每個東西都放在不同的工作袋裡。要把哪個東西拿出來就直接打開這個工作袋。對於每個工程來說,就算沒有WK或者SLN,我還是一個可編譯執行的工程。

解決方案不是工程文件,工程文件叫做XXproj。java也是一樣。workspace不是一個工程,java的每個工程都有project文件。這個概念你似乎有點混淆了。

基本來說大同小異。不過因為兩者設計思路上的不同,所以表現上有很大區別。用獨立的一個模塊或者程序來說。

java的一個獨立程序,最終編譯出來只有一個jar文件。工程內部的分層全部用文件目錄來實現。一般習慣性會分成常量類,共通方法類,上層邏輯類,底層邏輯類(調用資料庫操作),資料庫操作類,JavaBean類等。全部用目錄或者說包來區分,但都是包含在一個工程內,最終打包成為一個jar文件。(web的話可能是ear,war等,其他大家都是一個壓縮包。。。。)。

net的開發通用設計思路是,和java類似的分層,但是功能屬性不同的模塊直接作為一個個獨立的工程存在於解決方案中。各個功能間聯動屬於工程參照,類似java一個工程硬是拆分成多個jar,然後相互引用。編譯可以按照解決方案一次性全部編譯,也可以按照工程為單位只編譯你需要的。

優缺點是什麼?

workspace。

優點。

當我同時在管理很多項目的時候,workspace的優點可以體現出來。電腦性能允許的前提想,我只要打開一個eclipse,我就可以同時管理所有的不相關項目。而對於一個單獨的項目,在同一台電腦上的時候,如果有兩個人同時在維護一個項目的時候,我可以通過切換workspace讓雙方的開發習慣不會產生衝突。

缺點。

這個應該說是java的缺點。一個很龐大的工程,因為所有的功能和處理都被統合在同一個工程下,所以即使我只是修改一個很小的地方,最終我不得不全部都編譯一下。

solution解決方案。

優點。

這個應該說是net設計上的優點。根據功能不同,我一個獨立的大功能本質上是多個獨立的小功能組裝而成。組件本身來說可以是exe可執行程序,也可以是dll獨立庫。類似於積木。當我覺得某一個組件有問題,我可以單獨修改並編譯,執行的話只要停止程序或者服務,直接替換文件就可以。比如當你沒有辦法在vs里調試,必須上機通過打日誌的方法來調查問題的時候,你可以事先考慮幾個解決方案,對於有問題的組件根據不同的思路準備幾套,直接替換來進行不同方案的測試,這個非常方便。java的替換是整體全部都替換,實現上是不同的。雖然web項目可以通過直接替換class文件,類似於net的感覺,但是大部分情況下只能全部替換。

同時,因為每一個功能和模塊都獨立了,所以多個工程下,只開發給第三方,他人所需要的組件,耦合性上是一個松的狀態,保證了各個工程自己的獨立性。而作為開發者本身,因為功能按照工程區分,視覺上管理上相比java要更舒適一點。

缺點。

很明顯,項目管理。多個不相關的net項目管理的時候,只能通過打開多個vs來實現同時管理。


就是它名字的意思啊,你要解決一件事情,就需要一個解決方案。

解決方案中會包含具體的實現過程,比如多個項目,文檔,測試以及部署等等內容。將這些東西放在一起,就是解決問題的具體方案。具體表現在,所有文件放在一個解決方案目錄中。


比如你要搬家,那麼一輛卡車就是——」你搬家「這個需求的—— solution。至於你往卡車上放什麼東西,隨你,即使是一個妞。


比如寫一個遊戲, 整個遊戲是一個Solution, 遊戲的本體是其中一個Project, 遊戲附帶的地圖編輯器是其中另一個Project, 這樣。


更新:

題主你要這麼想,軟體開發發展了那麼久,java有很多大型項目,如果maven的project沒有solution的各種功能,那麼也不會被大家所接受,其實到最後大家都是大同小異的,因為開發需求擺在那。

另外,「弱爆了」這種詞希望題主慎用,特別是在自己還不了解某種東西的時候。(當然用maven構建工具和VS IDE相比也是有些問題的。VS的構建工具是msbuild,希望題主不要混淆各類工具的功能和)。如果題主一定要說這樣,希望跟上各種對比點的例子。

---------------------------------------------------------------------------------------------------------------------------------

首先回答:Solution不是為了解決依賴關係。項目間的依賴關係,也就是.NET中的引用,是靠csproj文件來進行維護的。

我們從一個Project開始,一個Project實現一個功能集合,最後就會編譯成一個dll文件,而Solution並不是Project,Solution是一系列Project的集合,並且還會包含很多其他的內容,比如測試用例,解決方案規劃,架構描述文件等等。Java的一些構建工具,比如maven,gradle等都是基於文件夾進行管理的,最終一個文件夾就會編譯出來一個可執行文件或者鏈接庫,但是一個solution並不會在外部表現出任何文件,最終還是看其中的每個project。Solution可以看作是一個庫,是用來整理所有項目相關的內容的。

Solution與其中的各個項目等,雖然可以看作是樹狀結構的,但其實其並不是嚴格按照Java構建工具那樣的靠文件夾的樹狀結構來組織的,你可以在一個Solution裡面放上不同的Project,來做一個鏈接,不需要在同一個路徑下面,如果類似的Java實現的話,可能需要把整個項目文件夾複製一份了。

我們來看一個例子,比如QQ,那麼一個QQ就是一個Solution,但是QQ包含了不同的功能集合,不同的功能點,那麼就有很多Project,比如聊天功能可以用作一個Project,QQ秀用作一個Project,底層的聊天內容加密是一個Project,網路連接傳輸是一個Project。並且每個Project還包括各自的資源文件,測試用例,文檔等等其他的內容。如果我們將QQ看作一個Project,那麼這個Project就會特別龐大,並且也不利於分布開發,不利於管理等。

現在,我們需要開發另一個程序,叫QQ輕聊版,其基本功能和QQ是一樣的,就是有些部分有些差別。如果我們基於文件夾管理的話,是不是需要再複製一份原有的QQ?而用解決方案的話,我們可以把剛才的那些聊天功能的Project,加密的Project,傳輸的Project等鏈接到這個Solution裡面來,如果內核組更改了具體的實現,也可以及時反饋給上層開發組。不會出現需要同步兩個相同的Project的問題。

當然這裡你也可以用所謂「依賴關係」來解決這個問題,但那就不是我這裡要講的問題了。依賴關係是基於項目級別的,不是解決方案級別的。


VS 的Solution就是maven頂級項目的意思

Solution里一般有很多project,分類的依據一般是按模塊分,分模塊除了讓代碼更清晰,還可以減少編譯的時間,編譯時VS生成二進位文件dll,exe和大堆臨時文件,大項目編譯一下,半個小時就過去了。

用Java時一般不會感覺編譯太慢,用VS最好配置一個SSD編譯時會爽一些


.net開發怒答一記,這貨就是一個根目錄,相當於你們的硬碟,物理層面的硬碟,你所有要搞得事情就丟在裡面.


Java原來沒有Solution概念?那一堆相關的project怎麼組織起來的?放一個目錄里?VS的solution就是用來組織管理一堆相關project和其他相關文檔/文件的概念。

VS solution有一個不好的地方,就是在MSBuild下是一個異類,不好自定義各種屬性和操作。

題主 @陳睿 更新了問題描述,說solution很像Maven,那我就去看了看Maven feature list然後做了如下對比,發下確實很像:

  • Simple project setup that follows best practices - get a new project or module started in seconds

這個其實不是solution本身的能力,而是VS project templates

  • Superior dependency management including automatic updating, dependency closures (also known as transitive dependencies)
  • 這個是跟solution中的project dependency功能相似的。不過project dependency本身其實是定義在每個project屬性里的,solution只是做一個全局的調度

  • Able to easily work with multiple projects at the same time
  • 。。。

  • Extensible, with the ability to easily write plugins in Java or scripting languages
  • 這個是MSBuild的能力,跟solution沒太大關係。


    你用它隨便寫個東西。

    你用它隨便寫個東西。

    你用它隨便寫個東西。


    顧名思義,解決方案就是解決一個問題的方案,可能只需要一個工程,也可能需要多個工程和文檔。例如做一個C/S架構的通信程序,建一個解決方案,裡面一個工程寫服務端,一個工程寫客戶端,如果服務端和客戶端用到很多共同的Model,可以再建一個類庫,把這些Model放進去,服務端和客戶端都引用這個類庫。這幾個工程合起來就是對C/S架構通信需求的解決方案。


    就是一種文件的組織方式,而已。sln下可以有文件和目錄(工程文件兼有二者的特點),與文件系統沒什麼區別

    倒是有個有意思的事:當我們談論數據放在哪裡時,如果談論的是磁碟扇區和目錄結構,我們管前者叫物理位置,管後者叫邏輯位置

    如果談論的是目錄結構和sln,那目錄結構變成了物理位置,後者才是邏輯位置= =


    可以類比為eclipse的workspace


    .sln實際上就是一個記錄項目組織的xml文件,找到它用編輯器打開,java那麼亂的東西你都做過,看看更先進的解決方案就什麼都更清楚了。


    就是解決方案,要解決一個問題(或者做一個項目)用到的(幾乎所有的)東西(類配置文件介面程序集等)的整體


    解決方案聽過沒,它就是指代一個問題的解決方案。


    行動代號


    一個產品,除了主線其他依賴項目也可以放到solution里。每個project可以編譯出一個binary,如果產品規劃里有很多dll/exe甚至純資源dll,那就都塞到這裡。不懂java不太知道該怎麼類比??


    推薦閱讀:

    作為程序員應該以什麼樣的態度對待編程語言、IDE和編輯器之爭?
    中國有哪些獨立 OS X 開發者?他們的生存狀況如何?
    如何看待CC++使用大量的宏定義函數?
    不會 tokenizer 和 parser 是種怎樣的體驗?
    關於自己的知識庫的困惑?

    TAG:程序員 | Web產品 | C# | MicrosoftVisualStudio |