我想动态生成一个string的语句:
frmEmployee frm=new frm;
frm.show();
其中 frmEmployee是用参数传进去的,请问这个string 的语名怎么写?===========================下面的方法可以执行组合的string源码======================================
private void method_test(string ACode)
{
ICodeCompiler vCodeCompiler = new CSharpCodeProvider().CreateCompiler();
CompilerParameters vCompilerParameters = new CompilerParameters();
vCompilerParameters.GenerateExecutable = false;
vCompilerParameters.GenerateInMemory = true;
vCompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
string vSource =
"using System.Windows.Forms;\n" +
"public class Temp\n" +
"{\n" +
" public void Test()\n" +
" {\n" +
" " + ACode + "\n" +
" }\n" +
"}\n";
CompilerResults vCompilerResults =
vCodeCompiler.CompileAssemblyFromSource(vCompilerParameters, vSource);
Assembly vAssembly = vCompilerResults.CompiledAssembly;
object vTemp = vAssembly.CreateInstance("Temp");
MethodInfo vTest = vTemp.GetType().GetMethod("Test");
vTest.Invoke(vTemp, null);
}
=========================================
就是不知道把中间那个vSource 的值换为:
frmEmployee frm=new frm;
frm.show();
怎么去写.....
frmEmployee frm=new frm;
frm.show();
其中 frmEmployee是用参数传进去的,请问这个string 的语名怎么写?===========================下面的方法可以执行组合的string源码======================================
private void method_test(string ACode)
{
ICodeCompiler vCodeCompiler = new CSharpCodeProvider().CreateCompiler();
CompilerParameters vCompilerParameters = new CompilerParameters();
vCompilerParameters.GenerateExecutable = false;
vCompilerParameters.GenerateInMemory = true;
vCompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
string vSource =
"using System.Windows.Forms;\n" +
"public class Temp\n" +
"{\n" +
" public void Test()\n" +
" {\n" +
" " + ACode + "\n" +
" }\n" +
"}\n";
CompilerResults vCompilerResults =
vCodeCompiler.CompileAssemblyFromSource(vCompilerParameters, vSource);
Assembly vAssembly = vCompilerResults.CompiledAssembly;
object vTemp = vAssembly.CreateInstance("Temp");
MethodInfo vTest = vTemp.GetType().GetMethod("Test");
vTest.Invoke(vTemp, null);
}
=========================================
就是不知道把中间那个vSource 的值换为:
frmEmployee frm=new frm;
frm.show();
怎么去写.....
{
ICodeCompiler vCodeCompiler = new CSharpCodeProvider().CreateCompiler();
CompilerParameters vCompilerParameters = new CompilerParameters();
vCompilerParameters.GenerateExecutable = false;
vCompilerParameters.GenerateInMemory = true; vCompilerParameters.ReferencedAssemblies.Add(GetType().Module.FullyQualifiedName); //<<<<<<<<<<添加模块文件路径
vCompilerParameters.ReferencedAssemblies.Add("System.dll");
vCompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
string vSource =
"using " + GetType().Namespace + ";\n" + // 引用命名空间
"using System.ComponentModel;\n" +
"using System.Windows.Forms;\n" +
"public class Temp\n" +
"{\n" +
" public void Test()\n" +
" {\n" +
" new " + GetType().Name + "().Show();" + // 生成类实例
" }\n" +
"}\n";
Console.WriteLine(typeof(Component).Module.FullyQualifiedName);
CompilerResults vCompilerResults =
vCodeCompiler.CompileAssemblyFromSource(vCompilerParameters, vSource);
if (vCompilerResults.Errors.Count > 0)
{
foreach (CompilerError vCompilerError in vCompilerResults.Errors)
{
Console.WriteLine("错误:" + vCompilerError.ErrorText);
}
return;
} Assembly vAssembly = vCompilerResults.CompiledAssembly;
object vTemp = vAssembly.CreateInstance("Temp");
MethodInfo vTest = vTemp.GetType().GetMethod("Test");
vTest.Invoke(vTemp, null);
}
CodeDomProvider.CreateProvider("CSharp").CompileAssemblyFromSource(vCompilerParameters, vSource);
zswang(伴水清清)(专家门诊清洁工) ( ) 信誉:100 Blog 加为好友 2007-5-29 18:09:39 得分: 0
这代码很熟悉,-_-!!! 好象是我写的=================================================
没错,就是抄你的....但是我还是没搞懂....=============================下面是我的代码.... private void Execute_Method(string ACode)
{
ICodeCompiler vCodeCompiler = new CSharpCodeProvider().CreateCompiler();
CompilerParameters vCompilerParameters = new CompilerParameters();
vCompilerParameters.GenerateExecutable = false;
vCompilerParameters.GenerateInMemory = true; vCompilerParameters.ReferencedAssemblies.Add(GetType().Module.FullyQualifiedName); //<<<<<<<<<<添加模块文件路径
vCompilerParameters.ReferencedAssemblies.Add("System.dll");
vCompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll"); string vSource =
"using " + GetType().Namespace + ";\n" + // 引用命名空间
"using System.ComponentModel;\n" +
"using System.Windows.Forms;\n" +
"public class Temp\n" +
"{\n" +
" public void Test()\n" +
" {\n" +
" new " + GetType().Name + "().Show();" + // 生成类实例
" }\n" +
"}\n";
CompilerResults vCompilerResults =
CodeDomProvider.CreateProvider("CSharp").CompileAssemblyFromSource(vCompilerParameters, vSource); if (vCompilerResults.Errors.Count > 0)
{
foreach (CompilerError vCompilerError in vCompilerResults.Errors)
{
Console.WriteLine("错误:" + vCompilerError.ErrorText);
}
return;
} Assembly vAssembly = vCompilerResults.CompiledAssembly;
object vTemp = vAssembly.CreateInstance("Temp");
MethodInfo vTest = vTemp.GetType().GetMethod("Test");
vTest.Invoke(vTemp, null); }
private void button1_Click(object sender, EventArgs e)
{
this.Execute_Method("frmEmployee");
}这段代码是在 frmMain中的,现在的情况是点Button后实例化打开了一个frmMain,我想打开的是我传进去的那个参数的窗体==> frmEmployee ?如何来改?
frmEmployee所在的命名空间 //假设是"tempspace"vCompilerParameters.ReferencedAssemblies.Add(@"c:\temp\temp.dll"); //<<<添加模块文件路径 "using tempspace;\n" + // 引用命名空间" new frmEmployee().Show();" + // 生成类实例