DIY 一套正版、免费、强大的 Visual Studio 2012 IDE
作为开发软件的程序员,应在力所能及的情况下使用正版软件。最近一直在用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)黑客精神第一条:这世上充满著等着被解决的迷人问题。上面解决问题的过程中进行了很多大胆的假设、猜想和验证,然后一步一步的得到结果,这种过程也是很迷人的。
本文转自xiaotie博客园博客,原文链接:http://www.cnblogs.com/xiaotie/archive/2013/02/22/2922204.html,如需转载请自行联系原作者
相关文章:

【青少年编程】【三级】 合作画画
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档&…

2021年还适合参加软件测试培训吗
随着互联网行业快速的发展,人们对于互联网技术更为关注,大部分人都想了解2021年还适合参加软件测试培训吗?软件测试在互联网是相对学起来比较简单的,来看看下面的详细介绍吧。 2021年还适合参加软件测试培训吗?在人工智能大数据的飞速发展的…

如何使网站的右键失效
在body标签下加上这行语句οncοntextmenureturn false οndragstartreturn false即<body οncοntextmenureturn false οndragstartreturn false>转载于:https://www.cnblogs.com/huanbia/archive/2013/03/16/2963950.html
【组队学习】孙健坤:基于Python的会员数据化运营
分享人:孙健坤,哈尔滨工业大学 分享内容: 什么是会员制?什么是会员数据化运营?如何进行会员数据化运营 组队学习: 基于Python的会员数据化运营 开源内容: https://github.com/datawhalech…

MySQL , MHA , Haproxy 配置
1. 基本架构 2. 读端口影射 3. 写端口影射 进行一个Health Check MHA Manager对Master节点MySQL 进行存活监控 读FailOver 1 读FailOver 2 写FailOver 1 转载于:https://www.cnblogs.com/kelvin19840813/p/8231999.html

UI培训分享:导航栏UI设计规范及注意事项有哪些?
UI设计学习起来要注意的东西还是有很多的,例如导航栏,导航栏UI设计规范及注意事项有哪些呢?今天小编为大家详细的介绍一下关于导航栏的设计注意事项,希望能够帮助到今后工作的你。 UI培训分享:导航栏UI设计规范及注意事项有哪些?…

【青少年编程】【四级】绘图程序优化
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档&…

分布式文件系统(FastDFS)安装 配置
[TOC] 百度百科: FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文…

javaWeb -- HTTP协议
笔记摘要: 作为web开发的前奏,这里介绍了什么是HTTP协议,HTTP请求与HTTP响应信息的介绍 一、什么是HTTP协议 客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定…

Python培训:Python有哪些函数?你了解几种?
本期小编要为大家带来的Python教程就是关于Python函数这方面的,我们都知道Python函数,一般是指组织好的、可重复使用的、用来实现单一或相关联功能的代码段,Python函数包含系统中自带的一些函数、第三方函数以及用户自定义的函数。那么Python…

BZOJ2331:[SCOI2011]地板——题解
http://www.lydsy.com/JudgeOnline/problem.php?id2331 题面复制于洛谷 题目描述 lxhgww的小名叫”小L“,这是因为他总是很喜欢L型的东西。小L家的客厅是一个R*C的矩形,现在他想用L型的地板来铺满整个客厅,客厅里有些位置有柱子,…

快速部署RDA Remote Diagnostic Agent
RDA Remote Diagnostic Agent远程诊断代理是Oracle Support售后服务使用的标准工具之一,当用户在Metalink上提交SR(TAR)时可能Oracle GCS(Global Customer Service)支持会需要让用户从MOS上下载RDA工具,通过RDA收集丰富的数据库环境信息(如包含OS、DB、C…

【青少年编程】【三级】计算成绩总和
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档&…

哪些人适合学web前端培训呢
哪些人适合学web前端培训呢?经常会有人问到这个问题,因为互联网对于很多人来说是非常具有诱惑力的,前端便是其中的一种互联网技术,那么针对这个问题,我们来看看下面的详细介绍吧。 哪些人适合学web前端培训呢?首先什么是前端呢?…

ASM丢失disk header导致ORA-15032、ORA-15040、ORA-15042 Diskgroup无法mount
ASM丢失disk header导致ORA-15032、ORA-15040、ORA-15042 Diskgroup无法mount的案例不少,这里我们介绍下如何解决。 SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Databas…

jQuery学习(第一天)
js的回顾 遇到的问题1.window.onload只能使用一个(事件覆盖问题) 2.代码的容错性不强 3.浏览器兼容性问题 4.代码量较多,书写很繁琐 5.代码很乱到处都是 6.动画效果我们很难实现 jQuery的基本使用 image.pngmin:它是压缩过的版本 区别:我们开发过程中&am…
【组队学习】曹志宾:基于Python的会员数据化运营
分享人:曹志宾,Datawhale成员,香港科技大学硕士在读 分享内容: 案例描述与分析前期准备与数据预处理RFM模型使用与操作Excel中的RFM分析 组队学习: 红星:基于Python的会员数据化运营孙健坤:…

为什么要参加java培训?有哪些优势?
很多人都想要通过学习java技术进入到互联网行业,有一部分人是自学,有一部分是报Java培训班学习,报培训班的人比较多,那么为什么要参加java培训?有哪些优势?来看看下面的详细介绍。 为什么要参加java培训?有哪些优势?俗话说&am…

一、javaSE (二十三)多线程
1:多线程(理 (1)多线程:一个应用程序有多条执行路径 进程: 正在执行的应用程序 线程: 进程的执行单元,执行路径 单线程: 一个应用程序只有一条执行路径 多线程: 一个应用程序有多条执行路径 多进程的意义? 提高CpU的使用率 多线程的意义? 提高应用程序的使用案 (2)Java程序的…

【青少年编程】【二级】绘制图形
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档&…

web前端培训分享:面向对象中类和对象的定义是什么?
在学习web前端技术的时候,我们接触的最多的便是面向对象这一块,其实很多编程技术都有用到这个现象,下面我们就为大家详细的介绍一下面向对象中类和对象的定义是什么? web前端培训分享:面向对象中类和对象的定义是什么?面向对象让…

无法嵌入互操作类型...请改用适用的接口 解决办法
http://blog.163.com/quan2006126/blog/static/1702286352010101810324232/背景:visual studio 2010、“添加引用”时出错: “无法嵌入互操作类型...请改用适用的接口” 解决方案: 选中项目中引入的dll, 鼠标右键, 选择…

宁彦吉:如何进行作业的评审?
如何进行作业的评审 由于 我们的组队学习是开放的,大家都可以一起学习,一起来做航海士,宁彦吉 把作业评选的教程总结出来,这样方便后面的航海士熟悉 任成森 开发的系统。 一、登录 1、登录流程 打开浏览器输入作业评审中心地址…

算法 - 时间复杂度
O(1) 常数阶 #include <stdio.h> #include <string.h>int main( ) {int i,sum 0,n 100000000000;sum (1 n) * (n /2);printf("%d",sum);return 0; }执行次数不随n的变化而变化。 O(n) 线性阶 #include <stdio.h> #include <string.h>int …

access百度翻译 get_百度AI攻略:智能上色
1.功能描述:想必大家家里都有很多黑白的老照片,里面有着满满的回忆。百度智能识别黑白图像内容并填充色彩,使黑白图像变得鲜活,让老照片重新焕发活力。说干就干,攻略和代码奉上。2.平台接入黑白图像上色接入网址&#…

sql语句中left join和inner join中的on与where的区别分析
原文:sql语句中left join和inner join中的on与where的区别分析关于SQL SERVER的表联接查询INNER JOIN 、LEFT JOIN和RIGHT JOIN,经常会用到ON和WHERE的条件查询,以前用的时候有时是凭感觉的,总是没有搞清楚,今日亲自测试了下&…

linux 笔记 一
查看apache是否开启pidof httpdps -aux | grep httpdps -ef| grep httpdpgrep httpd开启[停止|重启]/usr/sbin/apachectl start[stop|restart]/etc/init.d/httpd start[stop|restart]service httpd start[stop|restart]开机启动在/etc/rc.d/rc.local中增加启动apache的命令&…

【青少年编程】【三级】躲避恐龙
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100,小马老…

小数加分数怎样计算讲解_2020人教版三年级下册数学知识点汇总带视频讲解,让孩子在学习!...
小学生延期开学,孩子功课不能落下啊!帝源教育网课推出1-6年级语文数学英语教材同步讲解视频,让孩子在假期也能提早预习课文知识!手机用户访问:m.46344.com 即可观看学习哦!随着疫情的蔓延,学校…

JUnit基础及第一个单元测试实例(JUnit3.8)
JUnit基础及第一个单元测试实例(JUnit3.8) 单元测试 单元测试(unit testing) ,是指对软件中的最小可测试单元进行检查和验证。 单元测试不是为了证明您是对的,而是为了证明您没有错误。 单元测试主要是用来…