zoukankan      html  css  js  c++  java
  • 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的插件,其它地方未作修改。

    image

    注:可能是加载项目模板缓存的问题,第一次启动时如果窗体假死,直接关掉它,再重新打开就好了。

    ====

    说几句其他的话:

    (1)有人怀疑这样做的意义,认为VS 各种版本的注册码网上多的事,这样做多此一举。但好歹,这样实在对方授权范围内,而直接下载用注册码的是在对方授权范围外;

    (2)即使微软纵容 D 版满天飞,但是嗟来之食,总归无味;

    (3)通过上面操作,可以对Visual Studio 的插件结构有所了解,进而定制对自己最合适的IDE;

    (4)黑客精神第一条:这世上充满著等着被解决的迷人问题。上面解决问题的过程中进行了很多大胆的假设、猜想和验证,然后一步一步的得到结果,这种过程也是很迷人的。

  • 相关阅读:
    痞子衡嵌入式:在IAR开发环境下RTThread工程自定义函数段重定向失效分析
    痞子衡嵌入式:深扒IAR启动函数流程之段初始化实现中可用的压缩选项
    痞子衡嵌入式:深扒IAR启动函数流程及其__low_level_init设计对函数重定向的影响
    《痞子衡嵌入式半月刊》 第 44 期
    痞子衡嵌入式:再测i.MXRT1060,1170上的普通GPIO与高速GPIO极限翻转频率
    痞子衡嵌入式:把玩i.MXRT1062 TencentOS Tiny EVB_AIoT开发板(1) 开发环境搭建与点灯
    痞子衡嵌入式:嵌入式CortexM系统中断延迟及其测量方法简介
    痞子衡嵌入式:把玩i.MXRT1062 TencentOS Tiny EVB_AIoT开发板(2) 在Flash调试及离线启动
    痞子衡嵌入式:利用GPIO模块来测量i.MXRT1xxx的系统中断延迟时间
    痞子衡嵌入式:在i.MXRT1170上启动含DQS的Octal Flash可不严格设Dummy Cycle (以MT35XU512为例)
  • 原文地址:https://www.cnblogs.com/xiaotie/p/2922204.html
Copyright © 2011-2022 走看看