1515// under the License.
1616//
1717using System ;
18+ using System . IO ;
1819using System . Reflection . Emit ;
1920using 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
0 commit comments