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

构建 VS .NET 向导 - 第 1 部分

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.80/5 (10投票s)

2005年5月5日

4分钟阅读

viewsIcon

52825

Visual Studio .NET 已经为我们提供了很多向导,可以帮助我们创建骨架类和项目。开发人员可以扩展这些模板,甚至修改现有的模板。

目录

这是一种魔法

继续!运行 Visual Studio 并以任何你想要的语言(例如 C#)创建一个新项目。点击“确定”后会发生什么?这是一种魔法…… Visual Studio 会为你创建一个新项目,并在该项目中添加一个空类。Visual Studio 提供了很多漂亮的向导,可以帮助你开发大型项目——但这足够了吗?

我决定说“”!所以,拿起你的水晶球,看看魔法的揭晓……

引言

这是我决定写的系列文章中的第一篇,共四篇。它涵盖了调整现有向导的方法。在 CodeProject 上还有一些其他资源也解释了相同的主题。我已经将它们添加到了本文末尾的参考部分。其中一篇非常好的文章是 Emil Aström 的《为 Visual Studio.NET 创建项目项代码模板》,所以我不想再次讨论这篇文章中描述的概念。

开发人员应该始终做的一些事情是记录和测试他们的代码。使用 C# 可以轻松地使用代码文档标签来完成代码文档,并且可以使用 NDoc 等工具将其生成为易于阅读的格式。可以使用 NUnitTestDriven.NET(一个很棒的 Visual Studio 插件)来完成测试。

因此,在创建新类时,你通常会执行一些步骤,例如向类添加代码注释,其中包括类在代码注释的 <remarks> 部分中的日期、时间和作者。这通常适用于为你创建的默认构造函数。也许你还想为你的类中的字段、属性、构造函数和方法添加一些区域?

using System;
using System.Diagnostics;
namespace Wizardry1
{
    /// <summary>
    /// Comments for Class1.
    /// </summary>
    /// <remarks>
    /// <para>created: 5.May 2005</para>
    /// <para>Author  : Michael Groeger</para>
    /// </remarks>
    public class Class1
    {

        #region Class1 fields
        // add private fields here
        #endregion
        #region Class1  properties
        // add properties here
        #endregion
        #region Class1 constructors
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <remarks>
        /// <para>created: 5.May 2005</para>
        /// <para>Author  : Michael Groeger</para>
        /// </remarks>
        public Class1()
        {
            //
            // TODO: Add constructor logic here
            //
        }
        #endregion
        #region Class1  public members
        // add public members (properties/methods) here
        #endregion
        #region Class1  private members
        // add private members (properties/methods) here
        #endregion
    }
}

调整类模板

类模板

当你使用 Visual Studio 向导向项目中添加新类时,骨架类是从模板创建的,该模板可以在 C:\Program Files\Microsoft Visual Studio .NET 2003\VC#\VC#Wizards\CSharpAddClassWiz\Templates\1033\ 找到,名为 NewCSharpFile.cs。它看起来应该像这样

using System;
namespace [!output SAFE_NAMESPACE_NAME]
{
    /// <summary>
    /// Zusammenfassung für [!output SAFE_CLASS_NAME].
    /// </summary>
    public class [!output SAFE_CLASS_NAME]
    {
        public [!output SAFE_CLASS_NAME]()
        {
            //
            // TODO: Fügen Sie hier die Konstruktorlogik hinzu
            //
        }
    }
}

备注:子目录 1033 包含模板的美国英语本地化版本。

SAFE_NAMESPACE_NAMESAFE_CLASS_NAME 分别是命名空间和类名的占位符。向导将用你设置的类名和新类对应的命名空间替换它们。现在,我们想稍微调整一下模板。

添加一些代码注释

备份类模板 NewCSharpFile.cs,然后打开其副本,并将其另存为 NewCSharpFile.cs。在 Visual Studio 中打开模板,并添加一些注释和区域,如下所示

using System;
namespace [!output SAFE_NAMESPACE_NAME]
{
    /// <summary>
    /// Comments for [!output SAFE_CLASS_NAME]
    /// </summary>
    /// <remarks>
    /// <para>created: [!output CREATION_DATE]/para>
    /// <para>Author  : Your name goes here</para>
    /// </remarks>
    public class [!output SAFE_CLASS_NAME]
    {
 
        #region [!output SAFE_CLASS_NAME] fields
        // add private fields here
        #endregion
        #region [!output SAFE_CLASS_NAME]  properties
        // add properties here
        #endregion
        #region [!output SAFE_CLASS_NAME] constructors
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <remarks>
        /// <para>created: [!output CREATION_DATE]</para>
        /// <para>Author  : Your name goes here</para>
        /// </remarks>
        public [!output SAFE_CLASS_NAME]()
        {
            //
            // Add constructor logic here
            //
        }
        #endregion
        
        #region [!output SAFE_CLASS_NAME]  public members
        
        // add public members (properties/methods) here
        
        #endregion
        
        #region [!output SAFE_CLASS_NAME]  private members
        
        // add private members (properties/methods) here
        
        #endregion                
        
    }
}

保存文件,然后启动另一个 Visual Studio 实例。打开一个项目,并使用向导添加一个新类。现在生成的类应该看起来像这样

using System;

namespace Wizardry1
{
    /// <summary>
    /// Zusammenfassung fr MyClass.
    /// </summary>
    /// <remarks>
    /// <para>erstellt: [!output CREATION_DATE]</para>
    /// <para>Author  : Michael Groeger</para>
    /// </remarks>
    public class MyClass
    {

        #region MyClass fields

        // add private fields here

        #endregion

        #region MyClass  properties

        // add properties here

        #endregion

        #region MyClass constructors

        /// <summary>
        /// Constructor.
        /// </summary>
        /// <remarks>
        /// <para>erstellt: [!output CREATION_DATE]</para>
        /// <para>Author  : Michael Groeger</para>
        /// </remarks>
        public MyClass()
        {
            //
            // TODO: Fgen Sie hier die Konstruktorlogik hinzu
            //
        }

        #endregion

        #region MyClass  public members

        // add public members (properties/methods) here

        #endregion

        #region MyClass  private members

        // add private members (properties/methods) here

        #endregion

    }
}

所以,向导为你做了一项出色的工作。但是占位符 CREATION_DATE 没有被替换。CREATION_DATE 不是 Visual Studio 向导附带的参数之一。所以你必须自己添加它。

添加自定义参数

Templates 子目录的类模板旁边,有一个名为 default.js 的 JScript 文件,位于 C:\Program Files\Microsoft Visual Studio .NET 2003\VC#\VC#Wizards\CSharpAddClassWiz\Scripts\1033\

同样,1033 包含美国英语的本地化版本。在这里,你可以为向导添加自己的参数。通过调用来实现向导参数的添加:

wizard.AddSymbol([SYMBOL], [VALUE]);

我们现在要做的是添加逻辑,将当前日期添加到向导参数。备份 JScript 文件,并在 Visual Studio 中打开它。用于添加日期的 JScript 函数将如下所示:

function CreationDate()
{
       var Months = new Array("January","February","March","April","May","June",
                "July","August","September","October","November","December");
    var myDate = new Date();
    var currentDate = myDate.getDate()
    +"."
    + Months[myDate.getMonth()]
    +" "
    +myDate.getFullYear();
    
    wizard.AddSymbol("CREATION_DATE",currentDate);
}

这足以创建并将 Date 添加到向导的参数中。我们现在要做的就是在已经定义的 OnFinish() 函数中调用我们的函数:

function OnFinish(selProj, selObj)
{        
// [...]
    var strSafeProjectName     = CreateSafeName(strProjectName);
    wizard.AddSymbol("SAFE_PROJECT_NAME", strSafeProjectName);

    // add CreationDate() call    
    CreationDate();
    
    SetTargetFullPath(selObj);
    var strProjectPath    = wizard.FindSymbol("TARGET_FULLPATH");
    var strTemplatePath     = wizard.FindSymbol("TEMPLATES_PATH");
// [...]        
}

保存 JScript 文件,然后再次尝试使用类向导向你的项目添加一个新类。现在 CREATION_DATE 应该被当前日期替换了。

/// <summary>
/// Comments for Class1.
/// </summary>
/// <remarks>
/// <para>created: 5.May 2005</para>
/// <para>Author  : Michael Groeger</para>
/// </remarks>

摘要

我已经向你展示了,通过几个简单的步骤,很容易根据自己的需求调整现有向导。这些步骤是:

  • 编辑 C# 类模板 NewCSharpFile.cs
  • 编辑 JScript 文件 default.js 以添加一些新参数。

在下一篇文章中,我将解释如何轻松创建自己的向导。

参考文献

© . All rights reserved.