65.9K
CodeProject 正在变化。 阅读更多。
Home

构建 Visual Studio 2008 的 CodeProject 插件

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.91/5 (5投票s)

2009年6月24日

CPOL

3分钟阅读

viewsIcon

31915

从 Visual Studio IDE 中利用 CodeProject.com 上丰富的资源。

背景

随着 Visual Studio 的每次新版本发布,微软都为开发者提供了额外的工具,以帮助他们更快速、更有效地完成工作。这些工具中最有用的就是 Visual Studio SDK,它使开发者能够创建插件。这些插件可用于在 IDE 中提供额外的特性和功能。给予插件开发者的灵活性非常大 - Visual Studio 的几乎每一个方面都可以相对容易地进行监控和控制。 事实上,编写 Visual Studio 插件最难的部分可能是想出一个有用的功能来开发插件!

我们都知道,任何优秀的开发者每天至少会花几分钟时间浏览 CodeProject.com。 许多访问都是由开发过程中出现的编程问题驱动的,因此允许开发者从 Visual Studio IDE 本身利用 CodeProject.com 上丰富的资源是完全合理的。 这正是为 Visual Studio 2008 构建 Code Project 插件的前提。 在这里下载您的副本:https://codeproject.org.cn/services/addins/

入门

要创建一个新的插件项目,请转到“文件”->“新建项目”->“其他项目类型”->“可扩展性”,然后选择“Visual Studio 插件”。

为您的项目命名并单击“确定”。 这将启动插件向导。 单击“下一步”开始。

选择您首选的开发语言。 然后,系统将提示您选择一种开发语言,以及插件是否应能够在 VS.NET IDE 或 Macro IDE 中运行,或两者都运行。 在我们的例子中,我们为 Visual Studio 2008 选择两者。

接下来,我们输入插件的名称和单行描述。 我们快完成了。

6 步中的第 4 步是“插件选项”对话框。 此对话框允许在“工具”菜单中创建一个相应的项目,并确定插件的加载时间和谁可以使用它。

6 步中的第 5 步用于填充“帮助”->“关于”信息框。

最后一个对话框是一个确认屏幕,显示到目前为止选择的选项。 单击“完成”,您就可以开始了。

最初,您的解决方案资源管理器将如下所示

这是您的 Visual Studio 插件项目的基础,也是开始实现您的想法所需的一切。 当然,绝大多数插件都需要放置 UI 元素,以允许用户与之交互并使用它们。 Visual Studio SDK 允许轻松创建这些元素并将它们放置在 IDE 中。 但是,如果您正在寻找稍微更漂亮、更现代的 UX 呈现,那么您将需要比 Visual Studio SDK 中支持的基本 UI 样式和元素更多的东西。 输入 XAML。 Code Project 插件具有由 WPF/XAML 实现的精美界面和更简洁的 UI/UX 体验。 将其付诸实践需要比我们已经完成的更多的工作。

为了遵循良好的软件设计原则,我们将关注点分离; 我们为 WPF UI 创建一个单独的项目,该项目将成为插件的前端。 创建 WPF 项目后,您可以开始设置其样式并实现其各种 UI 行为。 我强烈建议在 Blend 中操作 Window(以及其中嵌套的任何后续控件)的 XAML,因为它为这些任务提供了 VS 无法提供的灵活性和响应性。 一旦您的 WPF/XAML 看起来和表现得如您所愿,只需将所有这些内容嵌套在一个常规用户控件中,该控件将反过来集成到 Visual Studio 中。 我们采用这种方法是因为 XAML 尚未在 Visual Studio SDK 中得到完全支持。

弥合 VS-SDK XAML 鸿沟

为此,您需要创建一个用户控件,如下所示,通过编程方式创建 XAML 控件并注入它们

public partial class CodeProjectSearchControl : 
       UserControl, IVsRunningDocTableEvents, IOleCommandTarget
{
    /// <summary>
    /// override the OnLoad event
    /// </summary>
    /// <param name="e"></param>
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        if (GlobalVariables.DTE == null)
            GlobalVariables.DTE = this.GetEnviroment();

        // create the search panel control
        // create the ElementHost control for hosting the WPF UserControl.
        ElementHost host = new ElementHost();
        host.Dock = DockStyle.Fill;

        // Create the WPF UserControl
        this.uc = new SearchPanelControl();
        this.uc.SetDTE(GlobalVariables.DTE);

        host.Child = this.uc;

        this.pnlSearch.Controls.Add(host);

        // create the ad rotator control
        ElementHost adhost = new ElementHost();
        adhost.Dock = DockStyle.Fill;

        AdRotator aduc = new AdRotator();
        aduc.SetDTE(GlobalVariables.DTE);

        adhost.Child = aduc;

        this.pnlProperty.Controls.Add(adhost);
    }
}

这两个协同工作的项目负责将 UI 连接到插件,现在您可以自由地将功能和 WPF 的活力添加到您自己的 Visual Studio 插件中!

© . All rights reserved.