在我的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示例here中的内容相同:
<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查找允许的内容lockItem
,lockElements
,lockAttributes
,lockAllElementsExcept
和lockAllAttributesExcept
。
为什么Visual Studio不喜欢type
内的filter
?
答案 0 :(得分:8)
Visual Studio使用模式验证配置文件中的XML。在这种情况下,它不会看到为架构中的filter元素定义的type属性。这可能只是架构中的疏忽/错误,因为过滤器配置的使用显然需要它,没有它就无法工作。这根本不是Windows Azure特有的。
如果您打开app.config / web.config文件并检查属性窗口,您将看到Schemas属性。这些是用于验证配置文件的所有模式,有几个。这里感兴趣的模式是DotNetConfig.xsd(在我的机器上它使用VS 2012在C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ xml \ Schemas \ 1033 \ DotNetConfig.xsd下)。如果您熟悉XSD,则可以将其打开,如果深入查看元素定义(configuration / system.diagnostics / trace / listeners / ListenerElement / filter),您将看到没有指示任何类型元素。但是,如果查看共享侦听器下的filter元素(configuration / system.diagnostics / sharedListeners / ListenerElement / filter),则属性类型存在并且是必需的。
如果您使用下面的配置,则不会在VS中看到下划线,因为在共享侦听器部分的过滤器下预计会出现类型。我再次指出,这里的下划线确实无关紧要,只是VS说它不认为你应该将type属性放在过滤器下面,但如果你想在跟踪下定义过滤器,显然需要它听众,只是架构中的一个错误。我不担心。
<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>