Skip to content

Commit cd2ec57

Browse files
RMTP-120 Add path
1 parent ec858b8 commit cd2ec57

File tree

4 files changed

+39
-6
lines changed

4 files changed

+39
-6
lines changed

Core.UnitTests/CodeGeneration/ReflectionEmit/ModuleBuilderFactoryTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public void CreateModuleBuilder ()
7171
public void CreateModuleBuilder_AppliesTypePipeAssemblyAttribute ()
7272
{
7373
var assemblyName = c_assemblyName + Guid.NewGuid();
74-
_factory.CreateModuleBuilder (assemblyName, assemblyDirectoryOrNull: null, strongNamed: false, keyFilePathOrNull: null);
74+
var moduleBuilder = _factory.CreateModuleBuilder (assemblyName, assemblyDirectoryOrNull: null, strongNamed: false, keyFilePathOrNull: null);
7575

7676
var assembly = AppDomain.CurrentDomain.GetAssemblies().SingleOrDefault(a => a.GetName().Name == assemblyName);
7777
Assert.That (assembly, Is.Not.Null);

Core/CodeGeneration/ReflectionEmit/Abstractions/AssemblyBuilderAdapter.cs

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
// under the License.
1616
//
1717
using System;
18+
using System.IO;
1819
using System.Reflection.Emit;
1920
using Remotion.Utilities;
2021

@@ -33,22 +34,29 @@ public class AssemblyBuilderAdapter : BuilderAdapterBase, IAssemblyBuilder
3334
{
3435
#if NET9_0_OR_GREATER
3536
private readonly PersistedAssemblyBuilder _assemblyBuilder;
37+
private readonly string _assemblyDirectory;
3638
#else
3739
private readonly AssemblyBuilder _assemblyBuilder;
3840
#endif
3941
private readonly ModuleBuilder _moduleBuilder;
4042

4143
#if NET9_0_OR_GREATER
42-
public AssemblyBuilderAdapter (PersistedAssemblyBuilder assemblyBuilder, ModuleBuilder moduleBuilder)
44+
public AssemblyBuilderAdapter (PersistedAssemblyBuilder assemblyBuilder, ModuleBuilder moduleBuilder, string assemblyDirectory)
4345
#else
4446
public AssemblyBuilderAdapter (AssemblyBuilder assemblyBuilder, ModuleBuilder moduleBuilder)
4547
#endif
4648
: base (ArgumentUtility.CheckNotNull ("assemblyBuilder", assemblyBuilder).SetCustomAttribute)
4749
{
4850
ArgumentUtility.CheckNotNull ("moduleBuilder", moduleBuilder);
51+
#if NET9_0_OR_GREATER
52+
ArgumentUtility.CheckNotNullOrEmpty ("assemblyDirectory", assemblyDirectory);
53+
#endif
4954

5055
_assemblyBuilder = assemblyBuilder;
5156
_moduleBuilder = moduleBuilder;
57+
#if NET9_0_OR_GREATER
58+
_assemblyDirectory = assemblyDirectory;
59+
#endif
5260
}
5361

5462
public string AssemblyName
@@ -61,14 +69,30 @@ public byte[] PublicKey
6169
get { return _assemblyBuilder.GetName ().GetPublicKey (); }
6270
}
6371

72+
#if NET9_0_OR_GREATER
73+
public string AssemblyDirectory
74+
{
75+
get { return _assemblyDirectory; }
76+
}
77+
#endif
78+
6479
public string SaveToDisk ()
6580
{
66-
#if NETFRAMEWORK || NET9_0_OR_GREATER
81+
#if NETFRAMEWORK
6782
// Scope name is the module name or file name, i.e., assembly name + '.dll'.
6883
_assemblyBuilder.Save (_moduleBuilder.ScopeName);
6984

7085
// This is the absolute path to the module, which is also the assembly file path for single-module assemblies.
7186
return _moduleBuilder.FullyQualifiedName;
87+
#elif NET9_0_OR_GREATER
88+
// Scope name is the module name or file name, i.e., assembly name + '.dll'.
89+
var modulePath = Path.Combine (_assemblyDirectory, _moduleBuilder.ScopeName);
90+
using (var stream = new FileStream (modulePath, FileMode.Create, FileAccess.Write, FileShare.Read))
91+
{
92+
_assemblyBuilder.Save (stream);
93+
}
94+
95+
return modulePath;
7296
#else
7397
throw new PlatformNotSupportedException ("Assembly persistence is not supported.");
7498
#endif

Core/CodeGeneration/ReflectionEmit/Abstractions/ModuleBuilderAdapter.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,20 +39,25 @@ public IAssemblyBuilder AssemblyBuilder
3939
get { return _assemblyBuilder; }
4040
}
4141

42+
#if NET9_0_OR_GREATER
43+
public ModuleBuilderAdapter (ModuleBuilder moduleBuilder, string assemblyDirectory)
44+
#else
4245
public ModuleBuilderAdapter (ModuleBuilder moduleBuilder)
46+
#endif
4347
: base (ArgumentUtility.CheckNotNull ("moduleBuilder", moduleBuilder).SetCustomAttribute)
4448
{
4549
#if NET9_0_OR_GREATER
50+
ArgumentUtility.CheckNotNullOrEmpty ("assemblyDirectory", assemblyDirectory);
4651
Assertion.IsTrue (moduleBuilder.Assembly is PersistedAssemblyBuilder);
4752
#else
4853
Assertion.IsTrue (moduleBuilder.Assembly is AssemblyBuilder);
4954
#endif
5055

5156
_moduleBuilder = moduleBuilder;
5257
#if NET9_0_OR_GREATER
53-
_assemblyBuilder = new AssemblyBuilderAdapter ((PersistedAssemblyBuilder) moduleBuilder.Assembly, moduleBuilder);
58+
_assemblyBuilder = new AssemblyBuilderAdapter ((PersistedAssemblyBuilder) moduleBuilder.Assembly, moduleBuilder, assemblyDirectory);
5459
#else
55-
_assemblyBuilder = new AssemblyBuilderAdapter (((AssemblyBuilder) moduleBuilder.Assembly), moduleBuilder);
60+
_assemblyBuilder = new AssemblyBuilderAdapter ((AssemblyBuilder) moduleBuilder.Assembly, moduleBuilder);
5661
#endif
5762
}
5863

Core/CodeGeneration/ReflectionEmit/ModuleBuilderFactory.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,12 @@ public IModuleBuilder CreateModuleBuilder (string assemblyName, string assemblyD
9494
var moduleBuilder = assemblyBuilder.DefineDynamicModule (moduleName);
9595
#endif
9696

97+
#if NET9_0_OR_GREATER
98+
var assmeblyDirectory = assemblyDirectoryOrNull ?? Environment.CurrentDirectory;
99+
var moduleBuilderAdapter = new ModuleBuilderAdapter (moduleBuilder, assmeblyDirectory);
100+
#else
97101
var moduleBuilderAdapter = new ModuleBuilderAdapter (moduleBuilder);
98-
102+
#endif
99103
var typePipeAttribute = new CustomAttributeDeclaration (s_typePipeAssemblyAttributeCtor, new object[] { _participantConfigurationID });
100104
moduleBuilderAdapter.AssemblyBuilder.SetCustomAttribute (typePipeAttribute);
101105

0 commit comments

Comments
 (0)