5

在我的 web.config 中,我有以下设置:

<system.diagnostics>
  <trace>
    <listeners>
       <add name="AzureDiagnostics"
          type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
          <filter type="" />
       </add>
    </listeners>
  </trace>
</system.diagnostics>

这与此处的 MSDN 示例相同:

<system.diagnostics>
  <trace>
     <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, 
           Microsoft.WindowsAzure.Diagnostics, 
           Version=1.0.0.0, 
           Culture=neutral, 
           PublicKeyToken=31bf3856ad364e35"
           name="AzureDiagnostics">
          <filter type="" />
       </add>
    </listeners>
 </trace>

然而,Visual Studio 会type在里面的属性下划线<filter type="",当我将鼠标移到那里时,它会显示the 'type' attribute is not allowed. 如果我尝试使用 IntelliSense 来查找它所允许的内容lockItemlockElementslockAttributeslockAllElementsExceptlockAllAttributesExcept.

为什么 Visual Studio 不喜欢type里面filter

4

1 回答 1

8

Visual Studio 使用架构来验证配置文件中的 XML。在这种情况下,它看不到为模式中的过滤器元素定义的类型属性。这可能只是模式中的一个疏忽/错误,因为过滤器配置的使用显然需要它并且没有它就无法工作。这根本不是 Windows Azure 特有的。

如果您打开 app.config/web.config 文件并检查属性窗口,您将看到 Schemas 属性。这些是用于验证您的配置文件的所有模式,并且有几个。这里感兴趣的架构是 DotNetConfig.xsd(在我的机器上,它位于 C:\Program Files (x86)\Microsoft Visual Studio 11.0\xml\Schemas\1033\DotNetConfig.xsd 下,使用 VS 2012)。如果您熟悉 XSD,您可以打开它,如果您深入到元素定义(configuration/system.diagnostics/trace/listeners/ListenerElement/filter),您会看到没有指示类型元素。但是,如果您查看共享侦听器(configuration/system.diagnostics/sharedListeners/ListenerElement/filter)下的过滤器元素,则属性类型在那里并且是必需的。

如果您使用下面的配置,您将不会在 VS 中看到下划线,因为在共享侦听器部分的过滤器下需要输入类型。再次指出,这里的下划线真的无所谓,只是VS说它不认为你应该把type属性放在filter下面,但是如果你想在trace下面定义filter,显然是必须的侦听器,只是架构中的一个错误。我不会担心的。

<system.diagnostics>
      <sharedListeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
            name="AzureDiagnostics">
          <filter type="" />
        </add>

      </sharedListeners>
        <trace>
            <listeners>
              <add name="AzureDiagnostics" />
            </listeners>
        </trace>
    </system.diagnostics>
于 2013-07-13T16:31:22.517 回答