作為開發軟件的程序員,應在力所能及的情況下使用正版軟件。最近一直在用VisualStudio 2012 Express Desktop/Web 版本開發項目。VisualStudio 2012 Express 是免費的,功能基本上夠用,但是還是有很多不足,如:
(1)無法安裝擴展;這個很致命,比如,想安裝IronPython,沒辦法;想安裝 Mono for Android,沒辦法。
(2)無法同時打開Winform項目、 C++ 項目和Web項目;
(3)解決方案下不能建虛擬目錄。
下面,我們來一步步克服上面問題,打造一款 正版、免費又強大的 Visual Studio 2012 IDE。本文的初始版本在有的電腦上有問題,下面是修改后的版本。
第一步:
下載,安裝 Visual Studio Express for Windows Desktop 和 Visual Studio Express for Web。地址:
http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-products
下載安裝之后,在線注冊一下,就可以免費使用了。
第二步:
下載,安裝 Visual Studio 2012 Shell,包括 Visual Studio Integrated Shell 和 Visual Studio Isolated Shell ,地址: http://msdn.microsoft.com/zh-cn/library/vstudio/bb685612.aspx
這個也是免費的,你可以用這個Shell開發自己的IDE工具。這個Shell 很方便安裝擴展,並且解決方案下能夠建虛擬目錄。
第三步:
將上面的 Visual Studio Express for Windows Desktop 和 Visual Studio Express for Web 作為插件,集成到 Visual Studio 2012 Shell 之中。
這一步是最關鍵一步,下面詳細說明。
(1)修改 Visual Studio Shell 的配置文件
以我的電腦為例(Win7,32位)。在 Microsoft Visual Studio 11.0\Common7\IDE 目錄下,有三個 exe 程序:devenv.exe 程序是 Visual Studio 2012 Shell 的可執行程序。VWDExpress.exe 是 Visual Studio Express for Web 的可執行程序,WDExpress.exe 是 Visual Studio Express for Windows Desktop 的可執行程序。這三個程序分別對應有各自的 ×.pkgdef 文件,規定了這個程序的擴展目錄。devenv.exe 對應的是 devenv.pkgdef 文件。
打開 devenv.pkgdef 文件,將內容更改為:
[$Initialization$]
"ApplicationExtensionsFolder" = "$RootFolder$\Common7\IDE\Extensions"
"PkgDefSearchPath" = "$ApplicationExtensionsFolder$; \
$RootFolder$\Common7\IDE\CommonExtensions; \
$RootFolder$\Common7\IDE\WDExpress; \
$RootFolder$\Common7\IDE\WDExpressExtensions; \
$RootFolder$\Common7\IDE\VWDExpress; \
$RootFolder$\Common7\IDE\VWDExpressExtensions; \
$RootFolder$\Common7\IDE\Extensions\Microsoft\VC\ClassWizard; \
$RootFolder$\Common7\IDE\devenv.vc.pkgdef;"
"UserExtensionsRootFolder" = "$AppDataLocalFolder$\Extensions"
"RegistryRoot" = "Software\Microsoft\VisualStudio\11.0"
上面這個配置文件簡單解釋一下。 $RootFolder$\Common7\IDE\Extensions 是 VS Shell默認加載插件的位置,一般安裝的第三方插件都會安裝到這個目錄下。$RootFolder$\Common7\IDE\CommonExtensions 是 VS 自帶的插件,如 Editor 等等。
$RootFolder$\Common7\IDE\WDExpress 和 $RootFolder$\Common7\IDE\WDExpressExtensions 是 Visual Studio 2012 for Desktop(刨除其中的VC部分) ,我們將它當作插件加載進來。
$RootFolder$\Common7\IDE\VWDExpress 和 $RootFolder$\Common7\IDE\VWDExpressExtensions 是 Visual Studio 2012 for Web ,我們將它當作插件加載進來。
$RootFolder$\Common7\IDE\Extensions\Microsoft\VC\ClassWizard 和 $RootFolder$\Common7\IDE\devenv.vc.pkgdef 的作用是將 VC 當作插件加載進來。
但是, WDExpress 、 VWDExpress 和 VC 自身不是插件,如果不寫配置文件的話,他們是加載不進來的。下面,我們來寫插件文件,將它們配置成插件。
(2)將 WDExpress 配置成插件
進入 Common7\IDE\WDExpress 目錄下,添加一個名為 extension.vsixmanifest 的文本文件,內容如下:
<?xml version="1.0" encoding="utf-8"?>
<Vsix Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">
<Identifier Id="WD Express..7DB76FEF-2C49-4E20-AD04-17DDE708C56B">
<Name>WD Express</Name>
<Author>Microsoft</Author>
<Version>1.0</Version>
<Description>WD Express Tools</Description>
<Locale>1033</Locale>
<License>ms-pl.rtf</License>
<SupportedProducts>
<VisualStudio Version="11.1">
<Edition>Pro</Edition>
<Edition>VDExpress</Edition>
<Edition>IntegratedShell</Edition>
</VisualStudio>
</SupportedProducts>
<SystemComponent>true</SystemComponent>
<InstalledByMsi>true</InstalledByMsi>
<SupportedFrameworkRuntimeEdition MinVersion="2.0" MaxVersion="4.5" />
</Identifier>
<References />
<Content>
<ProjectTemplate>ProjectTemplates</ProjectTemplate>
<ItemTemplate>ItemTemplates</ItemTemplate>
</Content>
</Vsix>
(3)將 VWDExpress 配置成插件
進入 Common7\IDE\VWDExpress 目錄下,添加一個名為 extension.vsixmanifest 的文本文件,內容如下:
<?xml version="1.0" encoding="utf-8"?>
<Vsix Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">
<Identifier Id="VWD Express..7DB76FEF-2C49-4E20-AD04-17DDE708C5DD">
<Name>VWD Express</Name>
<Author>Microsoft</Author>
<Version>1.0</Version>
<Description>VWD Express Tools</Description>
<Locale>1033</Locale>
<License>ms-pl.rtf</License>
<SupportedProducts>
<VisualStudio Version="11.1">
<Edition>Pro</Edition>
<Edition>VWDExpress</Edition>
<Edition>IntegratedShell</Edition>
</VisualStudio>
</SupportedProducts>
<SystemComponent>true</SystemComponent>
<InstalledByMsi>true</InstalledByMsi>
<SupportedFrameworkRuntimeEdition MinVersion="2.0" MaxVersion="4.5" />
</Identifier>
<References />
<Content>
<ProjectTemplate>ProjectTemplates</ProjectTemplate>
<ItemTemplate>ItemTemplates</ItemTemplate>
</Content>
</Vsix>
(4)將 VC 配置成插件
devenv.vc.pkgdef 文件就是VC的插件配置,這個文件是不存在的。我們在 Common7\IDE 目錄下,建立一個名為 devenv.vc.pkgdef 的文本文件,內容如下:
// Override the VC root for templates
[$RootKey$\Projects\{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}]
"DesignerTemplatesDir"="$ShellFolder$\VC\DesignerTemplates_WDExpress"
"ItemTemplatesDir"="$ShellFolder$\VC\VCProjectItems_WDExpress"
"ProjectTemplatesDir"="$ShellFolder$\VC\VCProjects_WDExpress"[$RootKey$\NewProjectTemplates\TemplateDirs\{F1C25864-3097-11D2-A5C5-00C04F7968B4}\/1]
"TemplatesDir"="$ShellFolder$\VC\VCProjects_WDExpress"[$RootKey$\Projects\{7C3490A3-8632-43C5-8A60-07DC2F450870}\AddItemTemplates\TemplateDirs\{3A3E1789-3E35-47B0-8567-D2FB407CC63D}\/1]
"TemplatesDir"="$ShellFolder$\VC\VCProjectItems_WDExpress\PropertySheets"[$RootKey$\Projects\{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\AddItemTemplates\TemplateDirs\{F1C25864-3097-11D2-A5C5-00C04F7968B4}\/1]
"TemplatesDir"="$ShellFolder$\VC\VCProjectItems_WDExpress"[$RootKey$\Projects\{8BC9CEBA-8B4A-11D0-8D11-00A0C91BC942}\AddItemTemplates\TemplateDirs\{F1C25864-3097-11D2-A5C5-00C04F7968B4}\/3]
"TemplatesDir"="$ShellFolder$\VC\VCAddClass_WDExpress"[$RootKey$\Projects\{7D6034C3-AFB8-05CB-2A75-DAA65E89BE83}\AddItemTemplates\TemplateDirs\{F1C25864-3097-11D2-A5C5-00C04F7968B4}\/1]
"TemplatesDir"="$ShellFolder$\VC\VCProjectItems_WDExpress"[$RootKey$\Projects\{A2FE74E1-B743-11d0-AE1A-00A0C90FFFC3}\AddItemTemplates\TemplateDirs\{F1C25864-3097-11D2-A5C5-00C04F7968B4}\/1]
"TemplatesDir"="$ShellFolder$\VC\VCNewItems_WDExpress"
(5)讓Visual Studio Shell 重新加載插件
接着,刪除插件緩存文件。我的在 C:\Users\Administrator\AppData\Local\Microsoft\VisualStudio\11.0\Extensions 目錄中,不同的系統可能在不同的位置。刪除這個目錄下的所有文件。
然后,通過控制台程序,進入到 Microsoft Visual Studio 11.0\Common7\IDE 目錄下,執行下面命令:
.\devenv.exe /setup
====
這樣就得到了一個集成C#,VB,C++,Web開發的,可正常安裝擴展的,支持建立虛擬目錄的正版免費 Visual Studio IDE。整個過程就是做了這么一件事情——設置配置文件,將Express for Desktop/Web以及VC配置成Visual Studio的插件,其它地方未作修改。
注:可能是加載項目模板緩存的問題,第一次啟動時如果窗體假死,直接關掉它,再重新打開就好了。
====
說幾句其他的話:
(1)有人懷疑這樣做的意義,認為VS 各種版本的注冊碼網上多的事,這樣做多此一舉。但好歹,這樣實在對方授權范圍內,而直接下載用注冊碼的是在對方授權范圍外;
(2)即使微軟縱容 D 版滿天飛,但是嗟來之食,總歸無味;
(3)通過上面操作,可以對Visual Studio 的插件結構有所了解,進而定制對自己最合適的IDE;
(4)黑客精神第一條:這世上充滿著等着被解決的迷人問題。上面解決問題的過程中進行了很多大膽的假設、猜想和驗證,然后一步一步的得到結果,這種過程也是很迷人的。