Visual Studio 為什麼不提供整體卸載功能?

是沒有吧?


實際上從Windows以後微軟歷史性地選擇了一個對用戶不友好的軟體部署方式,即使用安裝程序(installer)來代替之前的目錄部署(xcopy)。理由如下:

  1. 應用中發表的COM組件需要全局註冊
  2. 系統的驅動;資源管理器的右鍵菜單、特定擴展名的程序關聯等等Shell Extension需要全局註冊
  3. 應用帶的多媒體codec需要註冊
  4. 應用自帶的系統級服務、自啟動項需要註冊
  5. 同一家公司的多個應用共享的庫需要表達成一個單獨的可安裝組件,這樣可以「去冗餘」和「統一升級」
  6. 通過在註冊表和文件系統中隱藏標誌來支持「試用版」軟體

等等等等,反正理由千千萬(都是因為某個原因要在系統中進行全局性的註冊和更改),唯獨忽略了這種安裝機制忘了設計了一個萬全的、徹底的、不可被應用干預的卸載機制,結果就是用戶的系統不可避免地被水平低下的、流氓的安裝程序搞成垃圾場。全世界無數人的無數時間就被浪費在重裝系統上

同一時期其他主流OS也好不到哪裡去(*NIX、Mac OS),直到iOS的出世主流操作系統才第一次有了徹底的、應用不可干預的卸載機制


VS 是一個龐大的體系。雖然說它本身也可以做到完全卸載,但可能會帶來一些不可預料的問題。

VS 不僅僅是一個 IDE,還包括了各種依賴項,比如 .Net Framework 框架,以及 SQL Server,還有各種社區工具,它們在一起組成了一個完整的 VS。但是你要知道,這些依賴項,它們本身並不是 VS 的一部分,它們是獨立的個體,只是 VS 依賴它們才能運行而已。即使已經沒有 VS 了,那些依賴項也並不是就毫無用處了,它們說不定還在為別的程序而服務呢。就像一個人不懂高等數學,高等數學依然在為其他人服務一樣,高等數學只是一個工具,只是一個依賴項,它並不能絕對地成為哪一個個體的一部分。

所以,即使你卸載了 VS 本身,那些依賴項也不能肯定就能卸載。假如你在裝 VS 之前,電腦上並沒有存在過那些依賴項,那麼 VS 的安裝程序會把這些依賴項也給同步裝進去;反之,如果你在裝 VS 之前,電腦中已經有了其中一些依賴項(比如 C++ Redistributable 的依賴項),那麼安裝程序就會跳過這些已有的依賴項,將剩餘部分安裝好。那麼問題來了,卸載的時候,你需要將這些依賴項全部刪除嗎?純粹的卸載程序無法判斷,除非根據安裝日誌來判斷。但 VS 畢竟是一個開發工具,如果你已經用 VS 開發出了一些產品,而這些產品是依賴 .Net Framework 框架的,那會不會是,你卸載只是想卸載這個開發工具,並不想卸載依賴項,以保證自己開發出來的產品還能正常運行?

所以,乾脆為了保險起見,卸載只是卸載其開發環境的部分,對於其他的依賴組件,你們根據自己的需要選擇是否卸載。

其實 Linux 也一樣,以 Ubuntu 舉例,你在用 apt-get install 命令安裝一個軟體包的時候,系統會首先檢查是否有需要安裝的依賴項,有的話會順帶安裝上。當然,在你卸載的時候,默認只卸載軟體本身,而不同步卸載依賴項。你可以使用 apt-get autoremove 命令來讓系統搜索確實是毫無用處的依賴項來卸載。但這也是兩步完成的,不可能在卸載軟體的過程時就能同步卸載掉那些依賴項的。


只要你裝完VS之後,不要安裝任何需要一丁點.net / sqlserver / MFC 等東西的軟體,你卸載了就幾乎是乾淨的,當然100%是不可能的。不然別的軟體會因為跟VS共享組件,使得這些組件無法刪掉。因為刪掉了你這些軟體也全都不能用了。


vs_community.exe /uninstall /force

其中community換成你你版本,該文件位置請dir /s

另外,vs裝完,可能會提示諸如sql server或azure sdk的更新,如果裝了,就有可能卸不幹凈,畢竟已超出vs本身安裝程序管轄範圍。


This executable is designed to cleanup/scorch all Preview/RC/RTM releases of Visual Studio 2013, Visual Studio 2015 and Visual Studio vNext. It should be used as a last resort to clean up the user"s system before resorting to reimaging the machine.

請看:Releases · Microsoft/VisualStudioUninstaller · GitHub


我只知道安裝VS2013安裝的時候自動安裝的SQL Server部分是卸載不掉的…



VS本身是可以全部卸載的,但是一堆沒有說明的depends on丫自己也不知道這些東西還有誰用,所以就不敢卸載了.


它所依賴的組件是無法卸載的。比如有些軟體依賴.Net Framework,如果你沒有安裝,它會幫你安裝,但是如果你之前安裝過了(因為你之前用的其他軟體也依賴 .Net Framework),你希望卸載這個軟體的同時把.Net Framework也卸載掉嗎?同理,其他組件也一樣,別的軟體可能會用到。


推薦閱讀:

Visual Studio 是不是坑了一代人?為什麼?
Visual Studio Community 2013在編譯和運行時與Visual Studio Professional 2013有什麼區別?
VS2015編寫的C++程序發布到全新的Win7系統需要什麼條件?
公司必須用vs2005生產,可是我想用vs2013來編寫,然後用vs2005編譯,有什麼好辦法嗎?

TAG:微軟Microsoft | MicrosoftVisualStudio |