如何将Option Strict的设置保持为On(Add-In技术)

发表于:2007-06-30来源:作者:点击数: 标签:
在一次VSM的专访中,Dan Appleman提到:“我希望Visual Studio 项目能够在缺省状态下将Option Strict设置为On,而无需用手工编辑向导模板。”可能很多 程序员 都会认同Dan的观点-- 在 VB .NET实现中,将Option Strict off设置成缺省状态是Mircosoft一大错举。
在一次VSM的专访中,Dan Appleman提到:“我希望Visual Studio 项目能够在缺省状态下将Option Strict设置为On,而无需用手工编辑向导模板。”可能很多程序员都会认同Dan的观点-- 在VB.NET实现中,将Option Strict off设置成缺省状态是Mircosoft一大错举。但事实上你不必非得按照Microsoft的这一设定。在以下这个技巧中,我会介绍如何建立一个自动将Option Strict设置为On的add-in方法(用这个方法你可能都会忘记如何使用手动添加了)。

第一步是通过使用Add-in Wizard来建立一个新的Visual Studio add-in 项目,并将其命名为VBOptionStrictOn。当向导建好了这个add-in 并打开了Connect.vb模块的代码窗口之后,你可以在这个Connect类中声明两个类级(class-level) 变量。你需要将向导定义的这两个变量:Dim applicationObject As EnvDTE.DTE
Dim addInInstance as EnvDTE.AddIn

用以下两个变量声明来取代:Private _app As EnvDTE.DTE
Private WithEvents _SolutionEvents As SolutionEvents

接下来,在public OnConnection 的事件处理(event handler)中将向导生成的代码:applicationObject = CType(application, EnvDTE.DTE)
addInInstance = CType(addInInst, EnvDTE.AddIn)

用以下两个给变量赋值的语句来取代:_app = CType(application, EnvDTE.DTE)
_SolutionEvents = _app.Events.SolutionEvents

然后,在Solution Explorer中选择VBOptionStrictOn项目,并通过在Add Reference 对话框的.NET tab里选择VSLangProj assembly来添加一个reference。同时,在Connect.vb模块的代码顶部加上Imports VSLangProj语句。 VSLangProj assembly提供了名为prjOptionStrict的列举(enumeration),其中包含OptionStrict的可能值(On, Off)。

现在你可以开始将Option Strict设置成On了。整个add-in 过程包括四个加入到Connect类的小的VB.NET子过程。add-in过程不需要用户进行干涉因而无需使用用户界面。前两个过程是同一个方法的重载(overload):Public Sub SetOptionStrictOn()
   Dim proj As Project
   @#@#@# Check and set OptionStrict for each project in
   @#@#@# the open solution by calling an overloaded
   @#@#@# version of this sub.
   For Each proj In CType(_app.GetObject("VBProjects") _
      , Projects)
      Call SetOptionStrictOn(proj)
   Next
End Sub

Public Sub SetOptionStrictOn(ByRef proj As Project)
   Dim propOptionStrict As [Property]
   With proj
      propOptionStrict = _
         .Properties.Item("OptionStrict")
      @#@#@# If OptionStrict not "On"...
      If CType(propOptionStrict.Value, _
         prjOptionStrict) <> _
         prjOptionStrict.prjOptionStrictOn Then

         @#@#@# Set OptionStrict = "On".
         propOptionStrict.Value = _
            prjOptionStrict.prjOptionStrictOn
         .Save() @#@#@# Save changes to the project.
      End If
   End With @#@#@# proj
End Sub

通过使用上述重载,你可以得到两种方法(用最少的重复代码):一个将open solution中所有项目的Option Strict设置成on的不带参数的方法和另一个将单独指定项目中的Option Strict设置成on的带proj参数的方法。

接下来建后两个过程。每个过程各调用一个SetOptionStrictOn方法:Private Sub _SolutionEvents_Opened() _
   Handles _SolutionEvents.Opened
      Call SetOptionStrictOn()
   End Sub

   Private Sub _SolutionEvents_ProjectAdded( _
      ByVal Project As EnvDTE.Project) Handles _
      _SolutionEvents.ProjectAdded

      Call SetOptionStrictOn(Project)
   End Sub

打开Visual Studio中的一个solution将会触发第一个事件处理(_SolutionEvents_Opened),激活add-in会确保当前VB项目中的Option Strict被设置成on。这些项目可能是在你安装add-in之前就建好的,也可能是从一个没有装这个add-in的其他开发者那里拿来的。在将一个新的或是以前建好的项目加入到当前的solution中后会触发另一个事件处理(_SolutionEvents_ProjectAdded),当你用项目向导在新建的solution中加入一个项目模板时也会触发这一事件。这一处理确保在所有新建VB项目中的Option Strict是on的状态。

现在可以开始构建add-in了;你可以通过构建VBOptionStrictOnSetup项目时建立的Setup.ext 文件来安装或者卸载它。你可以在Tools | Add-in Manager中激活或禁止这个add-in。如果你还想把Option Strict设置成Off(在不卸载或者禁止VBOptionStrictOn add-in的条件下),你可以通过在一个VB 模块的代码顶部加一个Option Strict Off语句来实现。

要了解Add-in Wizard的用法说明,你可以参考http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsintro7/html/vxconcreatingaddin.asp。 要了解更多建立Visual Studio .NET add-in 资料,请参考http://msdn.microsoft.com/vstudio/downloads/automation.asp 和http://groups.yahoo.com/group/vsnetaddin.

关于作者:
Scott T. Hutchinson是一名微软认证解决方案开发专家,也是独立咨询公司Clear Lake Services in Westlake Village, Calif的创始人。Scott 还是Los Angeles .NET Developers Group的外事主管(www.ladotnet.org)。你可以通过[email protected] 或 www.clearlakeservices.com 联系他。

原文转自:http://www.ltesting.net