我们在第6和第7篇创建的Calculate小工具窗还有很多可以改进的地方,所以在这篇文章里,我们不会开发新的功能,而是重构我们的代码,封装出可以重用的类和方法。

     VSX背后的对象模型是非常丰富的:有几百个类和几千个方法。但我们在开发VS add-in和package的时候,光记住类和方法的名字是不够的,我们还需要知道相应的GUID以及其他相关的常数。

     我觉得在VSX的开发中最难的是开发者必须要把.NET和COM混着用。如果VSX的编程模型(对象模型)更简洁一点话,对开发人员是非常好的事情。

     微软在interop程序集之上,开发了一些用于托管代码的层(其中一个叫做MPF,全称是Managed Package Framework)。我认为MPF里提供的类和方法是非常棒的,但它们只会涉及到VSX的某些方面,还不够。

     所以在这篇文章里,我会告诉你如何把常用的功能封装出来,供我们以后开发VSX时使用。我希望你也能够在开发过程中,逐步创建你自己需要的工具集。

     从这篇文章开始,我会创建一个叫做VsxTools的类库。这一次我仅仅出于演示目的来使用这个类库,但是既然我们是一起学习VSX的,所以我打算把这个类库弄成一个真正可用的工具。在这篇文章里我会做如下的重构:

  1. 改进活动日志的调用
  2. 简化output window的调用

CodePlex上的源码

     当你在看这篇文章的时候,我已经把所有的示例代码和文章放到了CodePlex上了(http://www.codeplex.com/LearnVSXNow)。如果下载了最新的源码,你会看到在PackageStartupSamples目录下有一个PackageStartupSamples.sln文件。它包含了这系列文章里的所有的例子。我会随着VS 2008 SDK版本的更新来相应的更新这些例子(当然如果发现了bug的话,我也会更新它们)。

创建VsxTools类库

     我们最好把可重用的代码放到一个单独的类库里。所以,让我们创建一个名为VsxTools的C# class library项目,并把它添加到StartupToolsetRefactored项目所在的解决方案中。由于我们需要向这个VsxTools中添加VSX代码,所以我们要向这个项目中添加VS SDK interop和MPF程序集引用:

     — Microsoft.VisualStudio.OLE.Interop
     — Microsoft.VisualStudio.Shell.9.0
     — Microsoft.VisualStudio.Interop
     — Microsoft.VisualStudio.Interop.8.0
     — Microsoft.VisualStudio.Interop.9.0

     接下来,我们可以向这个类库里添加功能了。

改进活动日志的调用

     如果想往活动日志里写日志的话,我们需要写差不多半打行数的代码,例如:

private void LogCalculation(string firstArg, string secondArg, string operation,
  string result)
{
  string message = String.Format("Calculation executed: {0} {1} {2} = {3}",
    firstArg, operation, secondArg, result);
  IVsActivityLog log =
    Package.GetGlobalService(typeof(SVsActivityLog)) as IVsActivityLog;
  if (log == null) return;
  
  log.LogEntry(
    (result == "#Error")
      ?(UInt32) __ACTIVITYLOG_ENTRYTYPE.ALE_ERROR
      : (UInt32)__ACTIVITYLOG_ENTRYTYPE.ALE_INFORMATION,
    "Calculation", message);
}

相关文章:

  • 2021-09-10
  • 2022-01-10
  • 2021-09-21
  • 2021-10-23
  • 2021-10-24
  • 2021-10-13
  • 2021-09-09
猜你喜欢
  • 2022-02-10
  • 2022-02-13
  • 2021-07-08
  • 2022-01-19
  • 2021-06-01
  • 2021-07-28
  • 2021-08-21
相关资源
相似解决方案