| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,5 +1,7 @@ | |||
| 1 | 1 | using System; | |
| 2 | 2 | using System.Collections.Generic; | |
| 3 | + using System.Globalization; | ||
| 4 | + using System.Linq; | ||
| 3 | 5 | using System.Reflection; | |
| 4 | 6 | using System.Reflection.Emit; | |
| 5 | 7 | using System.Threading; | |
@@ -17,13 +19,15 @@ internal class CodeGenerator | |||
| 17 | 19 | private readonly AssemblyBuilder aBuilder; | |
| 18 | 20 | private readonly ModuleBuilder mBuilder; | |
| 19 | 21 | ||
| 22 | + const string NamePrefix = "__Python_Runtime_Generated_"; | ||
| 23 | + | ||
| 20 | 24 | internal CodeGenerator() | |
| 21 | 25 | { | |
| 22 | - var aname = new AssemblyName { Name = "__CodeGenerator_Assembly" }; | ||
| 26 | + var aname = new AssemblyName { Name = GetUniqueAssemblyName(NamePrefix + "Assembly") }; | ||
| 23 | 27 | var aa = AssemblyBuilderAccess.Run; | |
| 24 | 28 | ||
| 25 | 29 | aBuilder = Thread.GetDomain().DefineDynamicAssembly(aname, aa); | |
| 26 | - mBuilder = aBuilder.DefineDynamicModule("__CodeGenerator_Module"); | ||
| 30 | + mBuilder = aBuilder.DefineDynamicModule(NamePrefix + "Module"); | ||
| 27 | 31 | } | |
| 28 | 32 | ||
| 29 | 33 | /// <summary> | |
@@ -77,5 +81,20 @@ internal static void GenerateMarshalByRefsBack(ILGenerator il, IReadOnlyList<Typ | |||
| 77 | 81 | } | |
| 78 | 82 | } | |
| 79 | 83 | } | |
| 84 | + | ||
| 85 | + static string GetUniqueAssemblyName(string name) | ||
| 86 | + { | ||
| 87 | + var taken = new HashSet<string>(AppDomain.CurrentDomain | ||
| 88 | + .GetAssemblies() | ||
| 89 | + .Select(a => a.GetName().Name)); | ||
| 90 | + for (int i = 0; i < int.MaxValue; i++) | ||
| 91 | + { | ||
| 92 | + string candidate = name + i.ToString(CultureInfo.InvariantCulture); | ||
| 93 | + if (!taken.Contains(candidate)) | ||
| 94 | + return candidate; | ||
| 95 | + } | ||
| 96 | + | ||
| 97 | + throw new NotSupportedException("Too many assemblies"); | ||
| 98 | + } | ||
| 80 | 99 | } | |
| 81 | 100 | } | |
| Back | FazBrowse Home | New Git URL |
0 commit comments