// Module2Server.cs // build with the following command line switches // csc /t:module Module2Server.cs internal class Module2Server { }
Notice that we can now use the internal access modifier so that the class is only accessible to code within the assembly.
// Module2ClientApp.cs // build with the following command line switches // csc /addmodule:Module2Server.netmodule Module2ClientApp.cs using System; using System.Diagnostics; using System.Reflection; class Module2ClientApp { public static void Main() { Assembly DLLAssembly = Assembly.GetAssembly(typeof(Module2Server)); Console.WriteLine("Module1Server.dll Assembly Information"); Console.WriteLine("\t" + DLLAssembly); Process p = Process.GetCurrentProcess(); string AssemblyName = p.ProcessName + ".exe"; Assembly ThisAssembly = Assembly.LoadFrom(AssemblyName); Console.WriteLine("Module1Client.dll Assembly Information"); Console.WriteLine("\t" + ThisAssembly); } }
Notice how Module2Server.cs and Module2Client.exe are built: -
csc /t:module Module2Server.cs csc /addmodule:Module2Server.netmodule Module2Client.cs
First you must remove the /r switch because that switch is used only to reference assemblies and now both modules will reside in the same assembly. Then you must insert the /addmodule switch, which is used to tell the compiler which modules to add to the assembly that's being created.
Building and running the application now yields these results: -
Module1Server.dll Assembly Information Module2Client, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null Module1Client.dll Assembly Information Module2Client, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Another way to create an assembly is with the Assembly Generation tool. This tool will take as its input one or more files that are either .NET modules (containing MSIL) or resource files and image files. The output is a file with an assembly manifest. For example, you would use the Assembly Generation tool if you had several DLLs and you wanted to distribute and version them as a single unit. Assuming that your DLLs were named A.DLL, B.DLL and C.DLL, you would use the al.exe application to create the composite assembly as follows: -
al /out:COMPOSITE.DLL A.DLL B.DLL C.DLL