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

80酷酷网    80kuku.com

  在一次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)。你可以通过hutchclearlakeservices.com 或 www.clearlakeservices.com 联系他。

分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: