BTDB.IL.ILDynamicTypeDebugImpl.UniqueName C# (CSharp) Method

UniqueName() static private method

static private UniqueName ( string name, int maxLength = -1 ) : string
name string
maxLength int
return string
        internal static string UniqueName(string name, int maxLength = -1)
        {
            name = name.Replace('<', '_');
            name = name.Replace('>', '_');
            name = name.Replace(',', '_');
            name = name.Replace(" ", "");
            var uniqueName = maxLength == -1
                ? name
                : ShortenIfNeeded(name, maxLength - 5); //reserve 5 chars for __{uniqueIdx}
            var uniqueIdx = UniqueNames.AddOrUpdate(name, 0, (s, v) => v + 1);
            if (uniqueIdx != 0) uniqueName = $"{name}__{uniqueIdx}";
            return uniqueName;
        }

Usage Example

Esempio n. 1
0
        public ILDynamicMethodDebugImpl(string name, Type delegateType, Type thisType)
        {
            _delegateType   = delegateType;
            _expectedLength = 64;
            var mi         = delegateType.GetMethod("Invoke");
            var uniqueName = ILDynamicTypeDebugImpl.UniqueName(name, 259 - (DynamicILDirectoryPath.DynamicIL.Length + 1 + 4));

            _assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName(uniqueName), AssemblyBuilderAccess.RunAndSave, DynamicILDirectoryPath.DynamicIL);
            _moduleBuilder   = _assemblyBuilder.DefineDynamicModule(uniqueName + ".dll", true);
            var sourceCodeFileName = Path.Combine(DynamicILDirectoryPath.DynamicIL, uniqueName + ".il");

            _symbolDocumentWriter = _moduleBuilder.DefineDocument(sourceCodeFileName, SymDocumentType.Text, SymLanguageType.ILAssembly, SymLanguageVendor.Microsoft);
            _sourceCodeWriter     = new SourceCodeWriter(sourceCodeFileName, _symbolDocumentWriter);
            Type[] parameterTypes;
            if (thisType != null)
            {
                parameterTypes = new[] { thisType }.Concat(mi.GetParameters().Select(pi => pi.ParameterType)).ToArray();
            }
            else
            {
                parameterTypes = mi.GetParameters().Select(pi => pi.ParameterType).ToArray();
            }
            _sourceCodeWriter.StartMethod(name, mi.ReturnType, parameterTypes, MethodAttributes.Static);
            _typeBuilder          = _moduleBuilder.DefineType(name, TypeAttributes.Public, typeof(object), Type.EmptyTypes);
            _forbidenInstructions = new ILGenForbidenInstructionsCheating(_typeBuilder);
            _dynamicMethod        = _typeBuilder.DefineMethod("Invoke", MethodAttributes.Public | MethodAttributes.Static, mi.ReturnType, parameterTypes);
            for (int i = 0; i < parameterTypes.Length; i++)
            {
                _dynamicMethod.DefineParameter(i + 1, ParameterAttributes.In, $"arg{i}");
            }
        }
All Usage Examples Of BTDB.IL.ILDynamicTypeDebugImpl::UniqueName