Skip to content

PerformanceCounters do not support config entry for 'filemappingsize' #73706

Description

@steveharter

Description

During implementation of #23937 it was discovered that having a config entry of filemappingsize causes an exception and is not supported. It works fine in .NET Framework.

Reproduction Steps

Using a console app in Visual Studio in admin mode (admin required for perf counter creation):

stringcategoryName="PerformanceCounterCategory_CategoryType_SingleInstance_Category";CreateCategory(categoryName,PerformanceCounterCategoryType.SingleInstance);PerformanceCounterCategorypcc=newPerformanceCounterCategory(categoryName);PerformanceCounterCategory.Delete(categoryName);voidCreateCategory(stringcategoryName,PerformanceCounterCategoryTypecategoryType){stringcounterName=categoryName.Replace("_Category","_Counter");// If the category already exists, delete it, then create it.DeleteCategory(categoryName);PerformanceCounterCategory.Create(categoryName,"description",categoryType,counterName,"counter description");}voidDeleteCategory(stringcategoryName){if(PerformanceCounterCategory.Exists(categoryName)){PerformanceCounterCategory.Delete(categoryName);}inttries=0;while(PerformanceCounterCategory.Exists(categoryName)&&tries<10){System.Threading.Thread.Sleep(100);tries++;}}

and a config file named, for example, ConsoleApp1.dll.config and placed in the bin location next to ConsoleApp1.dll:

<configuration>
<system.diagnostics>
<performanceCounters filemappingsize="6524288" />
</system.diagnostics>
</configuration>

Causes

System.Configuration.ConfigurationErrorsException
HResult=0x80131902
Message=Configuration system failed to initialize
Source=System.Configuration.ConfigurationManager
StackTrace:
at System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 164
at System.Configuration.ClientConfigurationSystem.PrepareClientConfigSystem(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 201
at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 42
at System.Configuration.ConfigurationManager.GetSection(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ConfigurationManager.cs:line 154
at System.Diagnostics.DiagnosticsConfiguration.GetConfigSection() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 63
at System.Diagnostics.DiagnosticsConfiguration.Initialize() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 95
at System.Diagnostics.DiagnosticsConfiguration.get_PerformanceCountersFileMappingSize() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 34
at System.Diagnostics.SharedPerformanceCounter.GetFileMappingSizeFromConfig() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 731
at System.Diagnostics.SharedPerformanceCounter.GetCategoryData() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 671
at System.Diagnostics.SharedPerformanceCounter..ctor(String catName, String counterName, String instanceName, PerformanceCounterInstanceLifetime lifetime) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 96
at System.Diagnostics.SharedPerformanceCounter..ctor(String catName, String counterName, String instanceName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 89
at System.Diagnostics.SharedPerformanceCounter.RemoveAllInstances(String categoryName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 1389
at System.Diagnostics.PerformanceCounterCategory.Delete(String categoryName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/PerformanceCounterCategory.cs:line 392
at ConsoleApp54.Program.<DoIt>g__DeleteCategory|1_1(String categoryName) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 40
at ConsoleApp54.Program.<DoIt>g__CreateCategory|1_0(String categoryName, PerformanceCounterCategoryType categoryType) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 32
at ConsoleApp54.Program.DoIt() in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 21
at ConsoleApp54.Program.Main(String[] args) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 14
This exception was originally thrown at this call stack:
System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(bool) in ConfigurationSchemaErrors.cs
System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(System.Configuration.ConfigurationSchemaErrors) in BaseConfigurationRecord.cs
System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors() in BaseConfigurationRecord.cs
System.Configuration.ClientConfigurationSystem.EnsureInit(string) in ClientConfigurationSystem.cs
Inner Exception 1:
ConfigurationErrorsException: Unrecognized configuration section system.diagnostics. (C:\Users\sharter\source\repos\ConsoleApp54\bin\Debug\net7.0\ConsoleApp54.dll.config line 2)

Expected behavior

No exception; the file mapping size applied. Note that there is not a public API to read the applied value, so that is somewhat unfortunate for testing purposes and validation.

Actual behavior

Exception saying ConfigurationErrorsException: Unrecognized configuration section system.diagnostics.

Regression?

I don't believe so. The System.Diagnostics.ConfigurationManager assembly is missing the System.Diagnostics entry in the ImplicitMachineConfigHost class which is causing the exception.

Known Workarounds

No response

Configuration

No response

Other information

This issue won't repro after #73087 is in since that removes this support because fixing it requires new APIs or prevents the TraceSource functionality in that PR from working properly since the implementation on the PerfCounter side assumes no other entries in the System.Diagnostics section in the config file.

Adding support for this will likely require new APIs as temporary implemented in a5ac25d

namespaceSystem.Diagnostics{publicsealedpartialclassPerfCounterSettings:System.Configuration.ConfigurationElement{publicPerfCounterSettings(){}publicintFileMappingSize{get{thrownull;}}protectedoverrideSystem.Configuration.ConfigurationPropertyCollectionProperties{get{thrownull;}}}publicsealedpartialclassSystemDiagnosticsSection:System.Configuration.ConfigurationSection{publicSystemDiagnosticsSection(){}publicSystem.Diagnostics.PerfCounterSettingsPerfCounterSettings{get{thrownull;}}protectedoverrideSystem.Configuration.ConfigurationPropertyCollectionProperties{get{thrownull;}}protectedoverridevoidInitializeDefault(){}}}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    , 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
     blocks
    (function() {
    function addCopyButtons() {
    document.querySelectorAll('pre code').forEach(function(codeBlock) {
    if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
    codeBlock.parentElement.setAttribute('data-copy-added', 'true');
    var btn = document.createElement('button');
    btn.textContent = 'Copy';
    btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
    btn.onmouseover = function() { this.style.opacity = '1'; };
    btn.onmouseout = function() { this.style.opacity = '0.7'; };
    btn.onclick = function() {
    navigator.clipboard.writeText(codeBlock.textContent).then(function() {
    btn.textContent = 'Copied!';
    setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
    });
    };
    codeBlock.parentElement.style.position = 'relative';
    codeBlock.parentElement.appendChild(btn);
    });
    }
    addCopyButtons();
    // Re-run on dynamic content
    var observer = new MutationObserver(addCopyButtons);
    observer.observe(document.body, { childList: true, subtree: true });
    })();
    }
    } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
    })();
    (function(){
    try {
    var __m = "github.com";
    var __re = new RegExp('^' + "github\\.com" + '
    PerformanceCounters do not support config entry for 'filemappingsize' · Issue #73706 · dotnet/runtime · GitHub
    Skip to content

    PerformanceCounters do not support config entry for 'filemappingsize' #73706

    Description

    @steveharter

    Description

    During implementation of #23937 it was discovered that having a config entry of filemappingsize causes an exception and is not supported. It works fine in .NET Framework.

    Reproduction Steps

    Using a console app in Visual Studio in admin mode (admin required for perf counter creation):

    stringcategoryName="PerformanceCounterCategory_CategoryType_SingleInstance_Category";CreateCategory(categoryName,PerformanceCounterCategoryType.SingleInstance);PerformanceCounterCategorypcc=newPerformanceCounterCategory(categoryName);PerformanceCounterCategory.Delete(categoryName);voidCreateCategory(stringcategoryName,PerformanceCounterCategoryTypecategoryType){stringcounterName=categoryName.Replace("_Category","_Counter");// If the category already exists, delete it, then create it.DeleteCategory(categoryName);PerformanceCounterCategory.Create(categoryName,"description",categoryType,counterName,"counter description");}voidDeleteCategory(stringcategoryName){if(PerformanceCounterCategory.Exists(categoryName)){PerformanceCounterCategory.Delete(categoryName);}inttries=0;while(PerformanceCounterCategory.Exists(categoryName)&&tries<10){System.Threading.Thread.Sleep(100);tries++;}}

    and a config file named, for example, ConsoleApp1.dll.config and placed in the bin location next to ConsoleApp1.dll:

    <configuration>
    <system.diagnostics>
    <performanceCounters filemappingsize="6524288" />
    </system.diagnostics>
    </configuration>
    

    Causes

    System.Configuration.ConfigurationErrorsException
    HResult=0x80131902
    Message=Configuration system failed to initialize
    Source=System.Configuration.ConfigurationManager
    StackTrace:
    at System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 164
    at System.Configuration.ClientConfigurationSystem.PrepareClientConfigSystem(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 201
    at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 42
    at System.Configuration.ConfigurationManager.GetSection(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ConfigurationManager.cs:line 154
    at System.Diagnostics.DiagnosticsConfiguration.GetConfigSection() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 63
    at System.Diagnostics.DiagnosticsConfiguration.Initialize() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 95
    at System.Diagnostics.DiagnosticsConfiguration.get_PerformanceCountersFileMappingSize() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 34
    at System.Diagnostics.SharedPerformanceCounter.GetFileMappingSizeFromConfig() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 731
    at System.Diagnostics.SharedPerformanceCounter.GetCategoryData() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 671
    at System.Diagnostics.SharedPerformanceCounter..ctor(String catName, String counterName, String instanceName, PerformanceCounterInstanceLifetime lifetime) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 96
    at System.Diagnostics.SharedPerformanceCounter..ctor(String catName, String counterName, String instanceName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 89
    at System.Diagnostics.SharedPerformanceCounter.RemoveAllInstances(String categoryName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 1389
    at System.Diagnostics.PerformanceCounterCategory.Delete(String categoryName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/PerformanceCounterCategory.cs:line 392
    at ConsoleApp54.Program.<DoIt>g__DeleteCategory|1_1(String categoryName) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 40
    at ConsoleApp54.Program.<DoIt>g__CreateCategory|1_0(String categoryName, PerformanceCounterCategoryType categoryType) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 32
    at ConsoleApp54.Program.DoIt() in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 21
    at ConsoleApp54.Program.Main(String[] args) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 14
    This exception was originally thrown at this call stack:
    System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(bool) in ConfigurationSchemaErrors.cs
    System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(System.Configuration.ConfigurationSchemaErrors) in BaseConfigurationRecord.cs
    System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors() in BaseConfigurationRecord.cs
    System.Configuration.ClientConfigurationSystem.EnsureInit(string) in ClientConfigurationSystem.cs
    Inner Exception 1:
    ConfigurationErrorsException: Unrecognized configuration section system.diagnostics. (C:\Users\sharter\source\repos\ConsoleApp54\bin\Debug\net7.0\ConsoleApp54.dll.config line 2)
    

    Expected behavior

    No exception; the file mapping size applied. Note that there is not a public API to read the applied value, so that is somewhat unfortunate for testing purposes and validation.

    Actual behavior

    Exception saying ConfigurationErrorsException: Unrecognized configuration section system.diagnostics.

    Regression?

    I don't believe so. The System.Diagnostics.ConfigurationManager assembly is missing the System.Diagnostics entry in the ImplicitMachineConfigHost class which is causing the exception.

    Known Workarounds

    No response

    Configuration

    No response

    Other information

    This issue won't repro after #73087 is in since that removes this support because fixing it requires new APIs or prevents the TraceSource functionality in that PR from working properly since the implementation on the PerfCounter side assumes no other entries in the System.Diagnostics section in the config file.

    Adding support for this will likely require new APIs as temporary implemented in a5ac25d

    namespaceSystem.Diagnostics{publicsealedpartialclassPerfCounterSettings:System.Configuration.ConfigurationElement{publicPerfCounterSettings(){}publicintFileMappingSize{get{thrownull;}}protectedoverrideSystem.Configuration.ConfigurationPropertyCollectionProperties{get{thrownull;}}}publicsealedpartialclassSystemDiagnosticsSection:System.Configuration.ConfigurationSection{publicSystemDiagnosticsSection(){}publicSystem.Diagnostics.PerfCounterSettingsPerfCounterSettings{get{thrownull;}}protectedoverrideSystem.Configuration.ConfigurationPropertyCollectionProperties{get{thrownull;}}protectedoverridevoidInitializeDefault(){}}}

    Metadata

    Metadata

    Assignees

    No one assigned

      Type

      No type

      Projects

      No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' PerformanceCounters do not support config entry for 'filemappingsize' · Issue #73706 · dotnet/runtime · GitHub
      Skip to content

      PerformanceCounters do not support config entry for 'filemappingsize' #73706

      Description

      @steveharter

      Description

      During implementation of #23937 it was discovered that having a config entry of filemappingsize causes an exception and is not supported. It works fine in .NET Framework.

      Reproduction Steps

      Using a console app in Visual Studio in admin mode (admin required for perf counter creation):

      stringcategoryName="PerformanceCounterCategory_CategoryType_SingleInstance_Category";CreateCategory(categoryName,PerformanceCounterCategoryType.SingleInstance);PerformanceCounterCategorypcc=newPerformanceCounterCategory(categoryName);PerformanceCounterCategory.Delete(categoryName);voidCreateCategory(stringcategoryName,PerformanceCounterCategoryTypecategoryType){stringcounterName=categoryName.Replace("_Category","_Counter");// If the category already exists, delete it, then create it.DeleteCategory(categoryName);PerformanceCounterCategory.Create(categoryName,"description",categoryType,counterName,"counter description");}voidDeleteCategory(stringcategoryName){if(PerformanceCounterCategory.Exists(categoryName)){PerformanceCounterCategory.Delete(categoryName);}inttries=0;while(PerformanceCounterCategory.Exists(categoryName)&&tries<10){System.Threading.Thread.Sleep(100);tries++;}}

      and a config file named, for example, ConsoleApp1.dll.config and placed in the bin location next to ConsoleApp1.dll:

      <configuration>
      <system.diagnostics>
      <performanceCounters filemappingsize="6524288" />
      </system.diagnostics>
      </configuration>
      

      Causes

      System.Configuration.ConfigurationErrorsException
      HResult=0x80131902
      Message=Configuration system failed to initialize
      Source=System.Configuration.ConfigurationManager
      StackTrace:
      at System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 164
      at System.Configuration.ClientConfigurationSystem.PrepareClientConfigSystem(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 201
      at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 42
      at System.Configuration.ConfigurationManager.GetSection(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ConfigurationManager.cs:line 154
      at System.Diagnostics.DiagnosticsConfiguration.GetConfigSection() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 63
      at System.Diagnostics.DiagnosticsConfiguration.Initialize() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 95
      at System.Diagnostics.DiagnosticsConfiguration.get_PerformanceCountersFileMappingSize() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 34
      at System.Diagnostics.SharedPerformanceCounter.GetFileMappingSizeFromConfig() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 731
      at System.Diagnostics.SharedPerformanceCounter.GetCategoryData() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 671
      at System.Diagnostics.SharedPerformanceCounter..ctor(String catName, String counterName, String instanceName, PerformanceCounterInstanceLifetime lifetime) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 96
      at System.Diagnostics.SharedPerformanceCounter..ctor(String catName, String counterName, String instanceName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 89
      at System.Diagnostics.SharedPerformanceCounter.RemoveAllInstances(String categoryName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 1389
      at System.Diagnostics.PerformanceCounterCategory.Delete(String categoryName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/PerformanceCounterCategory.cs:line 392
      at ConsoleApp54.Program.<DoIt>g__DeleteCategory|1_1(String categoryName) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 40
      at ConsoleApp54.Program.<DoIt>g__CreateCategory|1_0(String categoryName, PerformanceCounterCategoryType categoryType) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 32
      at ConsoleApp54.Program.DoIt() in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 21
      at ConsoleApp54.Program.Main(String[] args) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 14
      This exception was originally thrown at this call stack:
      System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(bool) in ConfigurationSchemaErrors.cs
      System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(System.Configuration.ConfigurationSchemaErrors) in BaseConfigurationRecord.cs
      System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors() in BaseConfigurationRecord.cs
      System.Configuration.ClientConfigurationSystem.EnsureInit(string) in ClientConfigurationSystem.cs
      Inner Exception 1:
      ConfigurationErrorsException: Unrecognized configuration section system.diagnostics. (C:\Users\sharter\source\repos\ConsoleApp54\bin\Debug\net7.0\ConsoleApp54.dll.config line 2)
      

      Expected behavior

      No exception; the file mapping size applied. Note that there is not a public API to read the applied value, so that is somewhat unfortunate for testing purposes and validation.

      Actual behavior

      Exception saying ConfigurationErrorsException: Unrecognized configuration section system.diagnostics.

      Regression?

      I don't believe so. The System.Diagnostics.ConfigurationManager assembly is missing the System.Diagnostics entry in the ImplicitMachineConfigHost class which is causing the exception.

      Known Workarounds

      No response

      Configuration

      No response

      Other information

      This issue won't repro after #73087 is in since that removes this support because fixing it requires new APIs or prevents the TraceSource functionality in that PR from working properly since the implementation on the PerfCounter side assumes no other entries in the System.Diagnostics section in the config file.

      Adding support for this will likely require new APIs as temporary implemented in a5ac25d

      namespaceSystem.Diagnostics{publicsealedpartialclassPerfCounterSettings:System.Configuration.ConfigurationElement{publicPerfCounterSettings(){}publicintFileMappingSize{get{thrownull;}}protectedoverrideSystem.Configuration.ConfigurationPropertyCollectionProperties{get{thrownull;}}}publicsealedpartialclassSystemDiagnosticsSection:System.Configuration.ConfigurationSection{publicSystemDiagnosticsSection(){}publicSystem.Diagnostics.PerfCounterSettingsPerfCounterSettings{get{thrownull;}}protectedoverrideSystem.Configuration.ConfigurationPropertyCollectionProperties{get{thrownull;}}protectedoverridevoidInitializeDefault(){}}}

      Metadata

      Metadata

      Assignees

      No one assigned

        Type

        No type

        Projects

        No projects

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions

        , 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' PerformanceCounters do not support config entry for 'filemappingsize' · Issue #73706 · dotnet/runtime · GitHub
        Skip to content

        PerformanceCounters do not support config entry for 'filemappingsize' #73706

        Description

        @steveharter

        Description

        During implementation of #23937 it was discovered that having a config entry of filemappingsize causes an exception and is not supported. It works fine in .NET Framework.

        Reproduction Steps

        Using a console app in Visual Studio in admin mode (admin required for perf counter creation):

        stringcategoryName="PerformanceCounterCategory_CategoryType_SingleInstance_Category";CreateCategory(categoryName,PerformanceCounterCategoryType.SingleInstance);PerformanceCounterCategorypcc=newPerformanceCounterCategory(categoryName);PerformanceCounterCategory.Delete(categoryName);voidCreateCategory(stringcategoryName,PerformanceCounterCategoryTypecategoryType){stringcounterName=categoryName.Replace("_Category","_Counter");// If the category already exists, delete it, then create it.DeleteCategory(categoryName);PerformanceCounterCategory.Create(categoryName,"description",categoryType,counterName,"counter description");}voidDeleteCategory(stringcategoryName){if(PerformanceCounterCategory.Exists(categoryName)){PerformanceCounterCategory.Delete(categoryName);}inttries=0;while(PerformanceCounterCategory.Exists(categoryName)&&tries<10){System.Threading.Thread.Sleep(100);tries++;}}

        and a config file named, for example, ConsoleApp1.dll.config and placed in the bin location next to ConsoleApp1.dll:

        <configuration>
        <system.diagnostics>
        <performanceCounters filemappingsize="6524288" />
        </system.diagnostics>
        </configuration>
        

        Causes

        System.Configuration.ConfigurationErrorsException
        HResult=0x80131902
        Message=Configuration system failed to initialize
        Source=System.Configuration.ConfigurationManager
        StackTrace:
        at System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 164
        at System.Configuration.ClientConfigurationSystem.PrepareClientConfigSystem(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 201
        at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 42
        at System.Configuration.ConfigurationManager.GetSection(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ConfigurationManager.cs:line 154
        at System.Diagnostics.DiagnosticsConfiguration.GetConfigSection() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 63
        at System.Diagnostics.DiagnosticsConfiguration.Initialize() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 95
        at System.Diagnostics.DiagnosticsConfiguration.get_PerformanceCountersFileMappingSize() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 34
        at System.Diagnostics.SharedPerformanceCounter.GetFileMappingSizeFromConfig() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 731
        at System.Diagnostics.SharedPerformanceCounter.GetCategoryData() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 671
        at System.Diagnostics.SharedPerformanceCounter..ctor(String catName, String counterName, String instanceName, PerformanceCounterInstanceLifetime lifetime) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 96
        at System.Diagnostics.SharedPerformanceCounter..ctor(String catName, String counterName, String instanceName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 89
        at System.Diagnostics.SharedPerformanceCounter.RemoveAllInstances(String categoryName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 1389
        at System.Diagnostics.PerformanceCounterCategory.Delete(String categoryName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/PerformanceCounterCategory.cs:line 392
        at ConsoleApp54.Program.<DoIt>g__DeleteCategory|1_1(String categoryName) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 40
        at ConsoleApp54.Program.<DoIt>g__CreateCategory|1_0(String categoryName, PerformanceCounterCategoryType categoryType) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 32
        at ConsoleApp54.Program.DoIt() in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 21
        at ConsoleApp54.Program.Main(String[] args) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 14
        This exception was originally thrown at this call stack:
        System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(bool) in ConfigurationSchemaErrors.cs
        System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(System.Configuration.ConfigurationSchemaErrors) in BaseConfigurationRecord.cs
        System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors() in BaseConfigurationRecord.cs
        System.Configuration.ClientConfigurationSystem.EnsureInit(string) in ClientConfigurationSystem.cs
        Inner Exception 1:
        ConfigurationErrorsException: Unrecognized configuration section system.diagnostics. (C:\Users\sharter\source\repos\ConsoleApp54\bin\Debug\net7.0\ConsoleApp54.dll.config line 2)
        

        Expected behavior

        No exception; the file mapping size applied. Note that there is not a public API to read the applied value, so that is somewhat unfortunate for testing purposes and validation.

        Actual behavior

        Exception saying ConfigurationErrorsException: Unrecognized configuration section system.diagnostics.

        Regression?

        I don't believe so. The System.Diagnostics.ConfigurationManager assembly is missing the System.Diagnostics entry in the ImplicitMachineConfigHost class which is causing the exception.

        Known Workarounds

        No response

        Configuration

        No response

        Other information

        This issue won't repro after #73087 is in since that removes this support because fixing it requires new APIs or prevents the TraceSource functionality in that PR from working properly since the implementation on the PerfCounter side assumes no other entries in the System.Diagnostics section in the config file.

        Adding support for this will likely require new APIs as temporary implemented in a5ac25d

        namespaceSystem.Diagnostics{publicsealedpartialclassPerfCounterSettings:System.Configuration.ConfigurationElement{publicPerfCounterSettings(){}publicintFileMappingSize{get{thrownull;}}protectedoverrideSystem.Configuration.ConfigurationPropertyCollectionProperties{get{thrownull;}}}publicsealedpartialclassSystemDiagnosticsSection:System.Configuration.ConfigurationSection{publicSystemDiagnosticsSection(){}publicSystem.Diagnostics.PerfCounterSettingsPerfCounterSettings{get{thrownull;}}protectedoverrideSystem.Configuration.ConfigurationPropertyCollectionProperties{get{thrownull;}}protectedoverridevoidInitializeDefault(){}}}

        Metadata

        Metadata

        Assignees

        No one assigned

          Type

          No type

          Projects

          No projects

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' PerformanceCounters do not support config entry for 'filemappingsize' · Issue #73706 · dotnet/runtime · GitHub
          Skip to content

          PerformanceCounters do not support config entry for 'filemappingsize' #73706

          Description

          @steveharter

          Description

          During implementation of #23937 it was discovered that having a config entry of filemappingsize causes an exception and is not supported. It works fine in .NET Framework.

          Reproduction Steps

          Using a console app in Visual Studio in admin mode (admin required for perf counter creation):

          stringcategoryName="PerformanceCounterCategory_CategoryType_SingleInstance_Category";CreateCategory(categoryName,PerformanceCounterCategoryType.SingleInstance);PerformanceCounterCategorypcc=newPerformanceCounterCategory(categoryName);PerformanceCounterCategory.Delete(categoryName);voidCreateCategory(stringcategoryName,PerformanceCounterCategoryTypecategoryType){stringcounterName=categoryName.Replace("_Category","_Counter");// If the category already exists, delete it, then create it.DeleteCategory(categoryName);PerformanceCounterCategory.Create(categoryName,"description",categoryType,counterName,"counter description");}voidDeleteCategory(stringcategoryName){if(PerformanceCounterCategory.Exists(categoryName)){PerformanceCounterCategory.Delete(categoryName);}inttries=0;while(PerformanceCounterCategory.Exists(categoryName)&&tries<10){System.Threading.Thread.Sleep(100);tries++;}}

          and a config file named, for example, ConsoleApp1.dll.config and placed in the bin location next to ConsoleApp1.dll:

          <configuration>
          <system.diagnostics>
          <performanceCounters filemappingsize="6524288" />
          </system.diagnostics>
          </configuration>
          

          Causes

          System.Configuration.ConfigurationErrorsException
          HResult=0x80131902
          Message=Configuration system failed to initialize
          Source=System.Configuration.ConfigurationManager
          StackTrace:
          at System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 164
          at System.Configuration.ClientConfigurationSystem.PrepareClientConfigSystem(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 201
          at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 42
          at System.Configuration.ConfigurationManager.GetSection(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ConfigurationManager.cs:line 154
          at System.Diagnostics.DiagnosticsConfiguration.GetConfigSection() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 63
          at System.Diagnostics.DiagnosticsConfiguration.Initialize() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 95
          at System.Diagnostics.DiagnosticsConfiguration.get_PerformanceCountersFileMappingSize() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 34
          at System.Diagnostics.SharedPerformanceCounter.GetFileMappingSizeFromConfig() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 731
          at System.Diagnostics.SharedPerformanceCounter.GetCategoryData() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 671
          at System.Diagnostics.SharedPerformanceCounter..ctor(String catName, String counterName, String instanceName, PerformanceCounterInstanceLifetime lifetime) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 96
          at System.Diagnostics.SharedPerformanceCounter..ctor(String catName, String counterName, String instanceName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 89
          at System.Diagnostics.SharedPerformanceCounter.RemoveAllInstances(String categoryName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 1389
          at System.Diagnostics.PerformanceCounterCategory.Delete(String categoryName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/PerformanceCounterCategory.cs:line 392
          at ConsoleApp54.Program.<DoIt>g__DeleteCategory|1_1(String categoryName) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 40
          at ConsoleApp54.Program.<DoIt>g__CreateCategory|1_0(String categoryName, PerformanceCounterCategoryType categoryType) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 32
          at ConsoleApp54.Program.DoIt() in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 21
          at ConsoleApp54.Program.Main(String[] args) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 14
          This exception was originally thrown at this call stack:
          System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(bool) in ConfigurationSchemaErrors.cs
          System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(System.Configuration.ConfigurationSchemaErrors) in BaseConfigurationRecord.cs
          System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors() in BaseConfigurationRecord.cs
          System.Configuration.ClientConfigurationSystem.EnsureInit(string) in ClientConfigurationSystem.cs
          Inner Exception 1:
          ConfigurationErrorsException: Unrecognized configuration section system.diagnostics. (C:\Users\sharter\source\repos\ConsoleApp54\bin\Debug\net7.0\ConsoleApp54.dll.config line 2)
          

          Expected behavior

          No exception; the file mapping size applied. Note that there is not a public API to read the applied value, so that is somewhat unfortunate for testing purposes and validation.

          Actual behavior

          Exception saying ConfigurationErrorsException: Unrecognized configuration section system.diagnostics.

          Regression?

          I don't believe so. The System.Diagnostics.ConfigurationManager assembly is missing the System.Diagnostics entry in the ImplicitMachineConfigHost class which is causing the exception.

          Known Workarounds

          No response

          Configuration

          No response

          Other information

          This issue won't repro after #73087 is in since that removes this support because fixing it requires new APIs or prevents the TraceSource functionality in that PR from working properly since the implementation on the PerfCounter side assumes no other entries in the System.Diagnostics section in the config file.

          Adding support for this will likely require new APIs as temporary implemented in a5ac25d

          namespaceSystem.Diagnostics{publicsealedpartialclassPerfCounterSettings:System.Configuration.ConfigurationElement{publicPerfCounterSettings(){}publicintFileMappingSize{get{thrownull;}}protectedoverrideSystem.Configuration.ConfigurationPropertyCollectionProperties{get{thrownull;}}}publicsealedpartialclassSystemDiagnosticsSection:System.Configuration.ConfigurationSection{publicSystemDiagnosticsSection(){}publicSystem.Diagnostics.PerfCounterSettingsPerfCounterSettings{get{thrownull;}}protectedoverrideSystem.Configuration.ConfigurationPropertyCollectionProperties{get{thrownull;}}protectedoverridevoidInitializeDefault(){}}}

          Metadata

          Metadata

          Assignees

          No one assigned

            Type

            No type

            Projects

            No projects

            Relationships

            None yet

            Development

            No branches or pull requests

            Issue actions

            , 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' PerformanceCounters do not support config entry for 'filemappingsize' · Issue #73706 · dotnet/runtime · GitHub
            Skip to content

            PerformanceCounters do not support config entry for 'filemappingsize' #73706

            Description

            @steveharter

            Description

            During implementation of #23937 it was discovered that having a config entry of filemappingsize causes an exception and is not supported. It works fine in .NET Framework.

            Reproduction Steps

            Using a console app in Visual Studio in admin mode (admin required for perf counter creation):

            stringcategoryName="PerformanceCounterCategory_CategoryType_SingleInstance_Category";CreateCategory(categoryName,PerformanceCounterCategoryType.SingleInstance);PerformanceCounterCategorypcc=newPerformanceCounterCategory(categoryName);PerformanceCounterCategory.Delete(categoryName);voidCreateCategory(stringcategoryName,PerformanceCounterCategoryTypecategoryType){stringcounterName=categoryName.Replace("_Category","_Counter");// If the category already exists, delete it, then create it.DeleteCategory(categoryName);PerformanceCounterCategory.Create(categoryName,"description",categoryType,counterName,"counter description");}voidDeleteCategory(stringcategoryName){if(PerformanceCounterCategory.Exists(categoryName)){PerformanceCounterCategory.Delete(categoryName);}inttries=0;while(PerformanceCounterCategory.Exists(categoryName)&&tries<10){System.Threading.Thread.Sleep(100);tries++;}}

            and a config file named, for example, ConsoleApp1.dll.config and placed in the bin location next to ConsoleApp1.dll:

            <configuration>
            <system.diagnostics>
            <performanceCounters filemappingsize="6524288" />
            </system.diagnostics>
            </configuration>
            

            Causes

            System.Configuration.ConfigurationErrorsException
            HResult=0x80131902
            Message=Configuration system failed to initialize
            Source=System.Configuration.ConfigurationManager
            StackTrace:
            at System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 164
            at System.Configuration.ClientConfigurationSystem.PrepareClientConfigSystem(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 201
            at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 42
            at System.Configuration.ConfigurationManager.GetSection(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ConfigurationManager.cs:line 154
            at System.Diagnostics.DiagnosticsConfiguration.GetConfigSection() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 63
            at System.Diagnostics.DiagnosticsConfiguration.Initialize() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 95
            at System.Diagnostics.DiagnosticsConfiguration.get_PerformanceCountersFileMappingSize() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 34
            at System.Diagnostics.SharedPerformanceCounter.GetFileMappingSizeFromConfig() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 731
            at System.Diagnostics.SharedPerformanceCounter.GetCategoryData() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 671
            at System.Diagnostics.SharedPerformanceCounter..ctor(String catName, String counterName, String instanceName, PerformanceCounterInstanceLifetime lifetime) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 96
            at System.Diagnostics.SharedPerformanceCounter..ctor(String catName, String counterName, String instanceName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 89
            at System.Diagnostics.SharedPerformanceCounter.RemoveAllInstances(String categoryName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 1389
            at System.Diagnostics.PerformanceCounterCategory.Delete(String categoryName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/PerformanceCounterCategory.cs:line 392
            at ConsoleApp54.Program.<DoIt>g__DeleteCategory|1_1(String categoryName) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 40
            at ConsoleApp54.Program.<DoIt>g__CreateCategory|1_0(String categoryName, PerformanceCounterCategoryType categoryType) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 32
            at ConsoleApp54.Program.DoIt() in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 21
            at ConsoleApp54.Program.Main(String[] args) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 14
            This exception was originally thrown at this call stack:
            System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(bool) in ConfigurationSchemaErrors.cs
            System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(System.Configuration.ConfigurationSchemaErrors) in BaseConfigurationRecord.cs
            System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors() in BaseConfigurationRecord.cs
            System.Configuration.ClientConfigurationSystem.EnsureInit(string) in ClientConfigurationSystem.cs
            Inner Exception 1:
            ConfigurationErrorsException: Unrecognized configuration section system.diagnostics. (C:\Users\sharter\source\repos\ConsoleApp54\bin\Debug\net7.0\ConsoleApp54.dll.config line 2)
            

            Expected behavior

            No exception; the file mapping size applied. Note that there is not a public API to read the applied value, so that is somewhat unfortunate for testing purposes and validation.

            Actual behavior

            Exception saying ConfigurationErrorsException: Unrecognized configuration section system.diagnostics.

            Regression?

            I don't believe so. The System.Diagnostics.ConfigurationManager assembly is missing the System.Diagnostics entry in the ImplicitMachineConfigHost class which is causing the exception.

            Known Workarounds

            No response

            Configuration

            No response

            Other information

            This issue won't repro after #73087 is in since that removes this support because fixing it requires new APIs or prevents the TraceSource functionality in that PR from working properly since the implementation on the PerfCounter side assumes no other entries in the System.Diagnostics section in the config file.

            Adding support for this will likely require new APIs as temporary implemented in a5ac25d

            namespaceSystem.Diagnostics{publicsealedpartialclassPerfCounterSettings:System.Configuration.ConfigurationElement{publicPerfCounterSettings(){}publicintFileMappingSize{get{thrownull;}}protectedoverrideSystem.Configuration.ConfigurationPropertyCollectionProperties{get{thrownull;}}}publicsealedpartialclassSystemDiagnosticsSection:System.Configuration.ConfigurationSection{publicSystemDiagnosticsSection(){}publicSystem.Diagnostics.PerfCounterSettingsPerfCounterSettings{get{thrownull;}}protectedoverrideSystem.Configuration.ConfigurationPropertyCollectionProperties{get{thrownull;}}protectedoverridevoidInitializeDefault(){}}}

            Metadata

            Metadata

            Assignees

            No one assigned

              Type

              No type

              Projects

              No projects

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); PerformanceCounters do not support config entry for 'filemappingsize' · Issue #73706 · dotnet/runtime · GitHub
              Skip to content

              PerformanceCounters do not support config entry for 'filemappingsize' #73706

              Description

              @steveharter

              Description

              During implementation of #23937 it was discovered that having a config entry of filemappingsize causes an exception and is not supported. It works fine in .NET Framework.

              Reproduction Steps

              Using a console app in Visual Studio in admin mode (admin required for perf counter creation):

              stringcategoryName="PerformanceCounterCategory_CategoryType_SingleInstance_Category";CreateCategory(categoryName,PerformanceCounterCategoryType.SingleInstance);PerformanceCounterCategorypcc=newPerformanceCounterCategory(categoryName);PerformanceCounterCategory.Delete(categoryName);voidCreateCategory(stringcategoryName,PerformanceCounterCategoryTypecategoryType){stringcounterName=categoryName.Replace("_Category","_Counter");// If the category already exists, delete it, then create it.DeleteCategory(categoryName);PerformanceCounterCategory.Create(categoryName,"description",categoryType,counterName,"counter description");}voidDeleteCategory(stringcategoryName){if(PerformanceCounterCategory.Exists(categoryName)){PerformanceCounterCategory.Delete(categoryName);}inttries=0;while(PerformanceCounterCategory.Exists(categoryName)&&tries<10){System.Threading.Thread.Sleep(100);tries++;}}

              and a config file named, for example, ConsoleApp1.dll.config and placed in the bin location next to ConsoleApp1.dll:

              <configuration>
              <system.diagnostics>
              <performanceCounters filemappingsize="6524288" />
              </system.diagnostics>
              </configuration>
              

              Causes

              System.Configuration.ConfigurationErrorsException
              HResult=0x80131902
              Message=Configuration system failed to initialize
              Source=System.Configuration.ConfigurationManager
              StackTrace:
              at System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 164
              at System.Configuration.ClientConfigurationSystem.PrepareClientConfigSystem(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 201
              at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ClientConfigurationSystem.cs:line 42
              at System.Configuration.ConfigurationManager.GetSection(String sectionName) in /_/src/libraries/System.Configuration.ConfigurationManager/src/System/Configuration/ConfigurationManager.cs:line 154
              at System.Diagnostics.DiagnosticsConfiguration.GetConfigSection() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 63
              at System.Diagnostics.DiagnosticsConfiguration.Initialize() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 95
              at System.Diagnostics.DiagnosticsConfiguration.get_PerformanceCountersFileMappingSize() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/DiagnosticsConfiguration.cs:line 34
              at System.Diagnostics.SharedPerformanceCounter.GetFileMappingSizeFromConfig() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 731
              at System.Diagnostics.SharedPerformanceCounter.GetCategoryData() in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 671
              at System.Diagnostics.SharedPerformanceCounter..ctor(String catName, String counterName, String instanceName, PerformanceCounterInstanceLifetime lifetime) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 96
              at System.Diagnostics.SharedPerformanceCounter..ctor(String catName, String counterName, String instanceName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 89
              at System.Diagnostics.SharedPerformanceCounter.RemoveAllInstances(String categoryName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/SharedPerformanceCounter.cs:line 1389
              at System.Diagnostics.PerformanceCounterCategory.Delete(String categoryName) in /_/src/libraries/System.Diagnostics.PerformanceCounter/src/System/Diagnostics/PerformanceCounterCategory.cs:line 392
              at ConsoleApp54.Program.<DoIt>g__DeleteCategory|1_1(String categoryName) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 40
              at ConsoleApp54.Program.<DoIt>g__CreateCategory|1_0(String categoryName, PerformanceCounterCategoryType categoryType) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 32
              at ConsoleApp54.Program.DoIt() in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 21
              at ConsoleApp54.Program.Main(String[] args) in C:\Users\sharter\source\repos\ConsoleApp54\Program.cs:line 14
              This exception was originally thrown at this call stack:
              System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(bool) in ConfigurationSchemaErrors.cs
              System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(System.Configuration.ConfigurationSchemaErrors) in BaseConfigurationRecord.cs
              System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors() in BaseConfigurationRecord.cs
              System.Configuration.ClientConfigurationSystem.EnsureInit(string) in ClientConfigurationSystem.cs
              Inner Exception 1:
              ConfigurationErrorsException: Unrecognized configuration section system.diagnostics. (C:\Users\sharter\source\repos\ConsoleApp54\bin\Debug\net7.0\ConsoleApp54.dll.config line 2)
              

              Expected behavior

              No exception; the file mapping size applied. Note that there is not a public API to read the applied value, so that is somewhat unfortunate for testing purposes and validation.

              Actual behavior

              Exception saying ConfigurationErrorsException: Unrecognized configuration section system.diagnostics.

              Regression?

              I don't believe so. The System.Diagnostics.ConfigurationManager assembly is missing the System.Diagnostics entry in the ImplicitMachineConfigHost class which is causing the exception.

              Known Workarounds

              No response

              Configuration

              No response

              Other information

              This issue won't repro after #73087 is in since that removes this support because fixing it requires new APIs or prevents the TraceSource functionality in that PR from working properly since the implementation on the PerfCounter side assumes no other entries in the System.Diagnostics section in the config file.

              Adding support for this will likely require new APIs as temporary implemented in a5ac25d

              namespaceSystem.Diagnostics{publicsealedpartialclassPerfCounterSettings:System.Configuration.ConfigurationElement{publicPerfCounterSettings(){}publicintFileMappingSize{get{thrownull;}}protectedoverrideSystem.Configuration.ConfigurationPropertyCollectionProperties{get{thrownull;}}}publicsealedpartialclassSystemDiagnosticsSection:System.Configuration.ConfigurationSection{publicSystemDiagnosticsSection(){}publicSystem.Diagnostics.PerfCounterSettingsPerfCounterSettings{get{thrownull;}}protectedoverrideSystem.Configuration.ConfigurationPropertyCollectionProperties{get{thrownull;}}protectedoverridevoidInitializeDefault(){}}}

              Metadata

              Metadata

              Assignees

              No one assigned

                Type

                No type

                Projects

                No projects

                Relationships

                None yet

                Development

                No branches or pull requests

                Issue actions