如何:为诊断数据适配器创建自定义数据编辑器

创建诊断数据适配器后,您可能希望在用户选择您的自定义诊断数据适配器用于测试设置时,用户能够配置特定数据。 例如,您可以选择配置数据,这些配置数据指定要提取的注册表项、要模拟的网络负载级别、存储临时文件或要附加的工作文件的目录。

您必须使用配置文件来设置您的诊断数据适配器的初始值。 可提供自定义编辑器以使用户能够修改配置数据。

若要创建您自己的编辑器,则需要创建实现 IDataCollectorConfigurationEditor 的用户控件。

诊断数据适配器可使用 DataCollectorConfigurationEditorAttribute 来指定要用于编辑诊断数据配置设置的编辑器类。

还可以指定要使用的默认配置数据。 有关默认配置的示例,请参见用于创建诊断数据适配器的示例项目

使用自定义诊断数据适配器时,执行以下过程可创建自定义编辑器来更新测试设置的数据。

提示

若要创建自定义编辑器,必须首先创建诊断数据适配器,其中对类应用了 DataCollectorConfigurationEditorAttribute。 可以在该特性中使用可选 HelpUri 属性,以指定编辑器的帮助内容源。 有关如何创建诊断数据适配器的更多信息,请参见如何:创建诊断数据适配器

有关诊断数据适配器项目(包括自定义配置编辑器)的完整示例,请参见用于创建诊断数据适配器的示例项目

为诊断数据适配器创建自定义编辑器

为诊断数据适配器创建自定义编辑器

  1. 在诊断数据适配器的项目中创建用户控件:

    1. 右击包含诊断数据适配器类的代码项目,指向**“添加”,再指向“用户控件”**。

    2. 在此示例中,向窗体中添加具有文本:“Data File Name:”的标签和名为“FileTextBox”的文本框,以使用户能输入必要的数据。

    提示

    目前仅支持 Windows 窗体用户控件。

  2. 将这些行添加到声明部分:

    using System.Xml;
    using Microsoft.VisualStudio.TestTools.Common;
    using Microsoft.VisualStudio.TestTools.Execution;
    
  3. 使此用户控件成为自定义编辑器。

    1. 在您的代码项目中右击该用户控件,然后指向**“查看代码”**。

    2. 如下所示设置该类,以实现编辑器接口 IDataCollectorConfigurationEditor

       public partial class MyDataConfigEditor :
            UserControl, IDataCollectorConfigurationEditor
    
    1. 右击代码中的 IDataCollectorConfigurationEditor,再选择**“实现接口”**命令。 您必须为此接口实现的方法将添加到该类中。

    2. DataCollectorConfigurationEditorAttribute 添加到编辑器用户控件中以将它标识为诊断数据适配器编辑器,用您的诊断数据适配器的相应信息来替换**“公司”“产品”“版本”**:

      [DataCollectorConfigurationEditorTypeUri(
          "configurationeditor://MyCompany/MyConfigEditor/1.0")]
      
  4. 添加两个私有变量,如下所示:

    private DataCollectorSettings collectorSettings;
    private IServiceProvider ServiceProvider { get; set; }
    
  5. 添加代码以初始化诊断数据适配器的编辑器。 可使用设置变量中的数据向用户控件中的字段添加默认值。 此数据位于适配器的 XML 配置文件的 <DefaultConfiguration> 元素中。

    public void Initialize(
        IServiceProvider svcProvider,
        DataCollectorSettings settings)
    {
        ServiceProvider = svcProvider;
        collectorSettings = settings;
    
        // Display the default file name as listed in the settings file.
        this.SuspendLayout();
        this.FileTextBox.Text = getText(collectorSettings.Configuration);
        this.ResumeLayout();
    }
    
  6. 添加代码以将来自编辑器中控件的数据存回诊断数据适配器 API 所需的 XML 格式,如下所示:

    public DataCollectorSettings SaveData()
    {
        collectorSettings.Configuration.InnerXml =
            String.Format(
    @"<MyCollectorName
        http://MyCompany/schemas/MyDiagnosticDataCollector/1.0"">
      <File FullPath=""{0}"" />
    </MyCollectorName>",
        FileTextBox.Text);
        return collectorSettings;
    }
    
  7. 如果这对您很重要,请在 VerifyData 方法中添加代码以验证数据是否正确,也可以直接使该方法返回 true。

    public bool VerifyData()
    {
        // Not currently verifying data
        return true;
    }
    
  8. (可选)可以在 ResetToAgentDefaults() 方法(该方法使用专用 getText() 方法)中添加代码,以将数据重置为 XML 配置文件中提供的初始设置。

    // Reset to default value from XML configuration
    // using a custom getText() method
    public void ResetToAgentDefaults()
    {
        this.FileTextBox.Text = getText(collectorSettings.DefaultConfiguration);
    }
    
    // Local method to read the configuration settings
    private string getText(XmlElement element)
    {
        // Setup namespace manager with our namespace
        XmlNamespaceManager nsmgr =
            new XmlNamespaceManager(
                element.OwnerDocument.NameTable);
    
        // Find all the "File" elements under our configuration
        XmlNodeList files = element.SelectNodes("//ns:MyCollectorName/ns:File", nsmgr);
    
        string result = String.Empty;
        if (files.Count > 0)
        {
            XmlAttribute pathAttribute = files[0].Attributes["FullPath"];
            if (pathAttribute != null &&
                !String.IsNullOrEmpty(pathAttribute.Value))
            {
                result = pathAttribute.Value;
            }
        }
    
        return result;
    }
    
  9. 生成解决方案。 将诊断数据适配器程序集和 XML 配置文件 (<diagnostic data adapter name>.dll.config) 复制到基于您的安装目录的以下位置:Program Files\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\DataCollectors

    提示

    虽然配置编辑器与诊断数据适配器可位于不同的项目和程序集中,但它们也可位于同一程序集中。

  10. 若要使用正在测试的诊断数据适配器,必须从现有测试设置列表中进行选择,或者从 Microsoft 测试管理器或 Microsoft Visual Studio 2010 创建一个新的诊断数据适配器,然后选择它。

    该适配器将显示在测试设置的**“数据和诊断”**选项卡上,并具有您指派给该类的友好名称。

  11. 若要为您的测试设置配置诊断数据适配器,请单击适配器名称旁的**“配置”**。

    此时将显示您的自定义编辑器。

  12. 根据需要编辑自定义编辑器中的字段,然后单击**“保存”**。

  13. 如果您是从 Microsoft 测试管理器运行测试,则可以在运行测试前将这些测试设置分配给测试计划,也可以使用**“使用选项运行”**命令分配测试设置并重写测试设置。 有关测试设置的更多信息,请参见使用测试设置来设置计算机和收集诊断信息

  14. 在将您的新配置编辑器与诊断数据适配器一起使用之前,必须先将 DataCollectorConfigurationEditorAttribute 应用于要使用该编辑器的每个诊断数据适配器类,然后在客户端计算机上重新编译并重新安装它们。 有关安装诊断数据适配器和配置编辑器的更多信息,请参见如何:安装自定义诊断数据适配器

  15. 使用选择了您的诊断数据适配器的测试设置运行测试。

    您在编辑器中指定的数据文件将被附加到测试结果中。

有关如何配置测试设置,以便在运行测试时使用环境的更多信息,请参见为手动测试创建测试设置创建作为测试计划一部分的自动测试的测试设置

请参见

任务

用于创建诊断数据适配器的示例项目

参考

IDataCollectorConfigurationEditor

DataCollectorConfigurationEditorAttribute

DataCollectorConfigurationEditorAttribute

概念

创建诊断数据适配器以收集自定义数据或影响测试计算机

使用测试设置来设置计算机和收集诊断信息