System.ComponentModel.Composition, System.Diagnostics.PerformanceCounter and System.Runtime.Caching.
Helps with https://github.com/dotnet/runtime/issues/54012
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFrameworks>netcoreapp3.1;netstandard2.0</TargetFrameworks>
+ <TargetFrameworks>$(NetCoreAppCurrent);netcoreapp3.1;netstandard2.0</TargetFrameworks>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Compile Include="System.ComponentModel.Composition.cs" />
<Compile Include="System.ComponentModel.Composition.Forwards.cs" />
</ItemGroup>
+ <ItemGroup Condition="'$(TargetFramework)' == '$(NetCoreAppCurrent)'">
+ <ProjectReference Include="$(LibrariesProjectRoot)System.Linq.Expressions\ref\System.Linq.Expressions.csproj" />
+ </ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'">
<Reference Include="System.Linq.Expressions" />
<Reference Include="System.Runtime" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFrameworks>netcoreapp3.1;netstandard2.0;net461</TargetFrameworks>
+ <TargetFrameworks>$(NetCoreAppCurrent);netcoreapp3.1;netstandard2.0;net461</TargetFrameworks>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<Compile Condition="'$(TargetFramework)' != 'net461'" Include="System.Diagnostics.PerformanceCounter.cs" />
<Compile Condition="'$(TargetFramework)' == 'net461'" Include="System.Diagnostics.PerformanceCounter.net461.cs" />
</ItemGroup>
+ <ItemGroup Condition="'$(TargetFramework)' == '$(NetCoreAppCurrent)'">
+ <ProjectReference Include="$(LibrariesProjectRoot)System.Collections.NonGeneric\ref\System.Collections.NonGeneric.csproj" />
+ <ProjectReference Include="$(LibrariesProjectRoot)System.ComponentModel.Primitives\ref\System.ComponentModel.Primitives.csproj" />
+ <ProjectReference Include="$(LibrariesProjectRoot)System.Runtime.InteropServices\ref\System.Runtime.InteropServices.csproj" />
+ </ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'">
<Reference Include="System.Collections.NonGeneric" />
<Reference Include="System.ComponentModel.Primitives" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <TargetFrameworks>$(NetCoreAppCurrent)-windows;netcoreapp3.1-windows;netcoreapp3.1;netstandard2.0;net461</TargetFrameworks>
+ <TargetFrameworks>$(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);netcoreapp3.1-windows;netcoreapp3.1;netstandard2.0;net461</TargetFrameworks>
</PropertyGroup>
<!-- DesignTimeBuild requires all the TargetFramework Derived Properties to not be present in the first property group. -->
<PropertyGroup>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
- <TargetFrameworks>netcoreapp3.1;netstandard2.0</TargetFrameworks>
+ <TargetFrameworks>$(NetCoreAppCurrent);netcoreapp3.1;netstandard2.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<Compile Include="System.Runtime.Caching.cs" />
</ItemGroup>
+ <ItemGroup Condition="'$(TargetFramework)' == '$(NetCoreAppCurrent)'">
+ <ProjectReference Include="$(LibrariesProjectRoot)System.Collections\ref\System.Collections.csproj" />
+ <ProjectReference Include="$(LibrariesProjectRoot)System.Collections.Specialized\ref\System.Collections.Specialized.csproj" />
+ <ProjectReference Include="$(LibrariesProjectRoot)System.ComponentModel\ref\System.ComponentModel.csproj" />
+ </ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'">
<Reference Include="System.Collections" />
<Reference Include="System.Collections.Specialized" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
- <TargetFrameworks>$(NetCoreAppCurrent)-windows;netcoreapp3.1-windows;netcoreapp3.1;netstandard2.0-windows;netstandard2.0</TargetFrameworks>
+ <TargetFrameworks>$(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);netcoreapp3.1-windows;netcoreapp3.1;netstandard2.0-windows;netstandard2.0</TargetFrameworks>
<IncludePlatformAttributes>true</IncludePlatformAttributes>
</PropertyGroup>
<ItemGroup>
using System;
using System.Configuration;
+using System.Runtime.Versioning;
namespace System.Runtime.Caching.Configuration
{
+#if NET5_0_OR_GREATER
+ [UnsupportedOSPlatform("browser")]
+#endif
internal sealed class CachingSectionGroup : ConfigurationSectionGroup
{
public CachingSectionGroup()
using System;
using System.ComponentModel;
using System.Configuration;
+using System.Runtime.Versioning;
namespace System.Runtime.Caching.Configuration
{
+#if NET5_0_OR_GREATER
+ [UnsupportedOSPlatform("browser")]
+#endif
internal sealed class MemoryCacheElement : ConfigurationElement
{
private static readonly ConfigurationProperty s_propName =
using System.Collections.Specialized;
using System.Configuration;
using System.Runtime.Caching.Resources;
+using System.Runtime.Versioning;
namespace System.Runtime.Caching.Configuration
{
</system.caching>
*/
+#if NET5_0_OR_GREATER
+ [UnsupportedOSPlatform("browser")]
+#endif
internal sealed class MemoryCacheSection : ConfigurationSection
{
private static readonly ConfigurationProperty s_propNamedCaches = new ConfigurationProperty("namedCaches",
using System;
using System.Configuration;
+using System.Runtime.Versioning;
namespace System.Runtime.Caching.Configuration
{
+#if NET5_0_OR_GREATER
+ [UnsupportedOSPlatform("browser")]
+#endif
[ConfigurationCollection(typeof(MemoryCacheElement),
CollectionType = ConfigurationElementCollectionType.AddRemoveClearMap)]
internal sealed class MemoryCacheSettingsCollection : ConfigurationElementCollection
using System.Collections.Generic;
using System.Diagnostics.Tracing;
using System.Threading;
+using System.Runtime.Versioning;
namespace System.Runtime.Caching
{
+#if NET5_0_OR_GREATER
+ [UnsupportedOSPlatform("browser")]
+#endif
internal sealed class Counters : EventSource
{
#if NETCOREAPP3_1_OR_GREATER
using System.Collections;
using System.IO;
using System.Security;
+using System.Runtime.Versioning;
namespace System.Runtime.Caching
{
+#if NET5_0_OR_GREATER
+ [UnsupportedOSPlatform("browser")]
+#endif
internal sealed class FileChangeNotificationSystem : IFileChangeNotificationSystem
{
private readonly Hashtable _dirMonitors;
}
if (fcn == null)
{
+#if NET5_0_OR_GREATER
+ if (OperatingSystem.IsBrowser())
+ {
+ throw new PlatformNotSupportedException();
+ }
+#endif
+
fcn = new FileChangeNotificationSystem();
}
Interlocked.CompareExchange(ref s_fcn, fcn, null);
using System.Security;
using System.Threading;
using System.Diagnostics;
+using System.Runtime.Versioning;
namespace System.Runtime.Caching
{
private bool _useMemoryCacheManager = true;
private EventHandler _onAppDomainUnload;
private UnhandledExceptionEventHandler _onUnhandledException;
+#if NET5_0_OR_GREATER
+ [UnsupportedOSPlatformGuard("browser")]
+ private static bool _countersSupported => !OperatingSystem.IsBrowser();
+#else
+ private static bool _countersSupported => true;
+#endif
private bool IsDisposed { get { return (_disposed == 1); } }
internal bool ConfigLess { get { return _configLess; } }
{
try
{
- _perfCounters = new Counters(_name);
+ if (_countersSupported)
+ {
+ _perfCounters = new Counters(_name);
+ }
}
catch
{
}
if (_perfCounters != null)
{
- _perfCounters.Dispose();
+ if (_countersSupported)
+ {
+ _perfCounters.Dispose();
+ }
}
GC.SuppressFinalize(this);
}
using System.Globalization;
using System.Runtime.Caching.Configuration;
using System.Runtime.InteropServices;
+using System.Runtime.Versioning;
using System.Security;
using System.Threading;
private CacheMemoryMonitor _cacheMemoryMonitor;
private readonly MemoryCache _memoryCache;
private readonly PhysicalMemoryMonitor _physicalMemoryMonitor;
+#if NET5_0_OR_GREATER
+ [UnsupportedOSPlatformGuard("browser")]
+ private static bool _configSupported => !OperatingSystem.IsBrowser();
+#else
+ private static bool _configSupported => true;
+#endif
// private
private void InitializeConfiguration(NameValueCollection config)
{
MemoryCacheElement element = null;
- if (!_memoryCache.ConfigLess)
+ if (!_memoryCache.ConfigLess && _configSupported)
{
MemoryCacheSection section = ConfigurationManager.GetSection("system.runtime.caching/memoryCache") as MemoryCacheSection;
if (section != null)
}
}
- if (element != null)
+ if (element != null && _configSupported)
{
_configCacheMemoryLimitMegabytes = element.CacheMemoryLimitMegabytes;
_configPhysicalMemoryLimitPercentage = element.PhysicalMemoryLimitPercentage;
using System.Diagnostics;
using System.Security;
using System.Diagnostics.CodeAnalysis;
+using System.Runtime.Versioning;
namespace System.Runtime.Caching
{
private volatile bool _useInsertBlock;
private readonly MemoryCache _cache;
private readonly Counters _perfCounters;
+#if NET5_0_OR_GREATER
+ [UnsupportedOSPlatformGuard("browser")]
+ private static bool _countersSupported => !OperatingSystem.IsBrowser();
+#else
+ private static bool _countersSupported => true;
+#endif
internal MemoryCacheStore(MemoryCache cache, Counters perfCounters)
{
}
entry.CallNotifyOnChanged();
- if (_perfCounters != null)
+ if (_perfCounters != null && _countersSupported)
{
_perfCounters.Increment(CounterName.Entries);
_perfCounters.Increment(CounterName.Turnover);
{
entry.Release(_cache, reason);
}
- if (_perfCounters != null)
+ if (_perfCounters != null && _countersSupported)
{
_perfCounters.Decrement(CounterName.Entries);
_perfCounters.Increment(CounterName.Turnover);
// keep the sentinel from expiring, which in turn would force a removal of this entry from the cache.
entry.UpdateSlidingExpForUpdateSentinel();
- if (updatePerfCounters && _perfCounters != null)
+ if (updatePerfCounters && _perfCounters != null && _countersSupported)
{
_perfCounters.Increment(CounterName.Hits);
_perfCounters.Increment(CounterName.HitRatio);
}
else
{
- if (updatePerfCounters && _perfCounters != null)
+ if (updatePerfCounters && _perfCounters != null && _countersSupported)
{
_perfCounters.Increment(CounterName.Misses);
_perfCounters.Increment(CounterName.HitRatioBase);
trimmedOrExpired += trimmed;
}
- if (trimmed > 0 && _perfCounters != null)
+ if (trimmed > 0 && _perfCounters != null && _countersSupported)
{
// Update values for perfcounters
_perfCounters.IncrementBy(CounterName.Trims, trimmed);