22// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33
44using System ;
5- using System . Text . RegularExpressions ;
65using Microsoft . Extensions . Logging ;
76using Microsoft . Extensions . Logging . Abstractions ;
87
@@ -13,7 +12,6 @@ internal class TypeForwardingActivator : SimpleActivator
1312 private const string OldNamespace = "Microsoft.AspNet.DataProtection" ;
1413 private const string CurrentNamespace = "Microsoft.AspNetCore.DataProtection" ;
1514 private readonly ILogger _logger ;
16- private static readonly Regex _versionPattern = new Regex ( @",\s?Version=[0-9]+(\.[0-9]+){0,3}" , RegexOptions . Compiled , TimeSpan . FromSeconds ( 2 ) ) ;
1715
1816 public TypeForwardingActivator ( IServiceProvider services )
1917 : this ( services , NullLoggerFactory . Instance )
@@ -64,6 +62,27 @@ internal object CreateInstance(Type expectedBaseType, string originalTypeName, o
6462 }
6563
6664 protected string RemoveVersionFromAssemblyName ( string forwardedTypeName )
67- => _versionPattern . Replace ( forwardedTypeName , "" ) ;
65+ {
66+ // Type, Assembly, Version={Version}, Culture={Culture}, PublicKeyToken={Token}
67+
68+ var versionStartIndex = forwardedTypeName . IndexOf ( ", Version=" , StringComparison . Ordinal ) ;
69+ while ( versionStartIndex != - 1 )
70+ {
71+ var versionEndIndex = forwardedTypeName . IndexOf ( ',' , versionStartIndex + ", Version=" . Length ) ;
72+
73+ if ( versionEndIndex == - 1 )
74+ {
75+ // No end index, so are done and can remove the rest
76+ return forwardedTypeName . Substring ( 0 , versionStartIndex ) ;
77+ }
78+
79+ forwardedTypeName = forwardedTypeName . Remove ( versionStartIndex , versionEndIndex - versionStartIndex ) ;
80+ versionStartIndex = forwardedTypeName . IndexOf ( ", Version=" , StringComparison . Ordinal ) ;
81+ }
82+
83+ // No version left
84+ return forwardedTypeName ;
85+
86+ }
6887 }
6988}
0 commit comments