public DllCreator(double dbl1, double dbl2)
{
System.Reflection.AssemblyVersionAttribute ver = new System.Reflection.AssemblyVersionAttribute("1,0,0, 0");
System.CodeDom.Compiler.CompilerParameters parameters = new System.CodeDom.Compiler.CompilerParameters();
parameters.GenerateExecutable = false;
parameters.OutputAssembly = "my.dll";
System.CodeDom.Compiler.CompilerResults r = System.CodeDom.Compiler.CodeDomProvider.CreateProv ider("C#").CompileAssemblyFromSource(parameters, "public class myClass { public static double code1 = " + dbl1 + ";public static double code2 = " + dbl2 + ";}");
Console.WriteLine(System.Reflection.Assembly.LoadF rom("my.dll").GetType("myClass").GetField("code1") .GetValue(null));
Console.WriteLine(System.Reflection.Assembly.LoadF rom("my.dll").GetType("myClass").GetField("code2") .GetValue(null));
}
این کلاس دو ارکومان داره که میتونی هنگام ساختن dll مقداری درونش ذخیره کنید
اگر این کلاس صدا بزنید
DllCreator dll= new DllCreator(1,2)
یک dll ساخته میشه بنام my.dll با دو فیلد استاتیک که دارای مقادیر 1و 2 هست
برای اینکه ببینی آیا داده ذخیره شده یا نه تابع زیر رو صدا بزنید و در پنجره OutPut مشاهده میکنید که تابع دارای فیلدهایی با مقادیر 1و2 میباشد
در ضمن my.dll در مسیر bin برنامه ساخته میشه
public static void GetLicense()
{
// Load the assembly
System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFrom(AppDomain.Curr entDomain.BaseDirectory + "my.dll");
// Get all of the types defined in the assembly
Type[] typesInAssembly = assembly.GetTypes();
foreach (Type type in typesInAssembly)
{
Console.WriteLine("Type: {0}", type);
// This loads the public fields
System.Reflection.FieldInfo[] fields = type.GetFields();
foreach (var field in fields)
{
// Console.WriteLine(" {0}", field.Name);
if (field.Name == "code1")
{
Console.WriteLine(field.GetValue(0));
}
if (field.Name == "code2")
{
Console.WriteLine(field.GetValue(1));
}
}
}
}