惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - Roland

几个基本的计算机概念 Silverlight 5几个不错的新特性 无光驱采用U盘安装完整版xp javascript 日期格式化(转) jQuery URL Parser 帮助 .net环境下的javascript引擎汇总 使用ANTLR进行命令行参数解析 探讨Antlr中文文法与英文文法的差异 .net与java中关于访问性的差异 基础知识之vb.net的拷贝构造函数 垃圾回收浅谈 ASP.NET 页面对象模型[转自Msdnchina] dotnetnuke小结 dotnetnuke中皮肤管理小问题 DNN中令人困惑的用户管理机制 第一次学习dotnetnuke [转帖]怎样成为优秀的软件模型设计者? [转帖]论程序设计方法 让VFP回到旧时代
使用VSTA定制二次开发IDE(一)
Roland · 2009-03-27 · via 博客园 - Roland

Visual studio tools for application是微软免费提供的方便开发人员定制应用程序的工具。通过在开发人员发布的应用程序中集成.Net framework和可再次分发的IDE,我们的最终用户可以使用VB.net和C#开发插件,最终改变应用程序的行为。其效果与office的VBA是一样的,而且office2007就是基于VSTA做的扩展。

想在应用程序中集成IDE主要的步骤是:

1、定义宿主程序(我们的主应用程序)暴露给插件程序的对象模型,宿主程序可以是.Net应用程序,也可以是基于Com的应用程序。这个步骤产生像Excel或Word的对象模型。

2、为二次开发IDE创建VB.Net或C#的工程模板,应用程序的最终用户将使用这些模板创建二次开发用的工程。(目前不清楚VSTA是否支持语言扩展,如果支持的话,我们就可以定义自己的领域语言-DSL,这样最终用户可以使用领域语言进行二次开发了)

3、定义插件的发现和加载机制,使得我们的应用程序可以顺利加载最终用户编写的插件。

4、把可再次分发的VSTA IDE合并到我们的应用程序中,使得最终用户可以在应用程序中启动IDE。

5、制作打包程序,分发应用程序。

为了有一个直观的影响,并了解使用VSTA的简单性,下面描述的是最简化的实现启动VSTA IDE的步骤,其中省略了定义对象模型和工程模板等主要步骤,所以这些步骤完成后并不能供用户二次开发。

1、创建一个Console应用程序,添加引用:

两个Com引用

image

image

一个.Net Library引用

image

2、编写代码

添加引用

using VSTADTEProvider.Interop;
using EnvDTE;

添加静态变量,及启动代码。

private static DTE vstaDTE;

private static void startIDE()
{
    IDTEProvider dteProvider = new VSTADTEProviderClass();
    string HostID = "Hello";
    UInt32 TimeOut = 10000;
    vstaDTE = dteProvider.GetDTE(HostID, TimeOut);
    vstaDTE.MainWindow.Visible = true;
}

然后在main函数中调用。

3、光有以上步骤还不能运行,需要配置一些额外环境。

打开注册表:regedit

在【HKEY_LOCAL_MACHINE\Software\Microsoft\VSTAHostConfig】添加键值

image 2.0项下添加如图所示的键image

其中ProjectTemplateLocation指向一个现有的工程模板。

打开Visual Studio 2008 命令行窗口,转到路径: %ProgramFiles%\Microsoft Visual Studio 9\Common7\IDE\,运行 【vsta.exe /hostid hello /setup】

4、运行刚才建立的控制台应用程序,效果如下:刚才建立的HostID是Hello

image

后续的文章将会补全建立完整的二次开发IDE。