private string say()
{
string method = @"namespace Yb
{
public class helloworld
{
public helloworld()
{
}
public string sayHello1(string str)
{
return str;
}
public string sayHello(string str,string str1)
{
return str+str1;
}
}
}";
CodeSnippetCompileUnit unit = new CodeSnippetCompileUnit(method);
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters paras = new CompilerParameters();
paras.ReferencedAssemblies.Add(" System.dll");
paras.ReferencedAssemblies.Add(" System.Data.dll");
paras.ReferencedAssemblies.Add(" System.Data.SqlClient.dll");
paras.GenerateInMemory = true;
paras.GenerateExecutable = false;
Assembly asm = provider.CompileAssemblyFromDom(paras, unit).CompiledAssembly;
Type type = asm.GetType("Yb.helloworld");
MethodInfo mi = type.GetMethod( "sayHello1" , BindingFlags.Public | BindingFlags.Instance);
object obj = asm.CreateInstance("Yb.helloworld");
string returnstr = mi.Invoke(obj, new object[] { "helloworld" }).ToString();
return returnstr;
}
System.Data.SqlClient就在System.Data.dll中,没有所谓的System.Data.SqlClient.dll的。
那我要动态编译程序怎么添加对它的应用啊?用这样的方式: paras.ReferencedAssemblies.Add(""); 谢了
@饮冰18: 删除掉paras.ReferencedAssemblies.Add("System.Data.SqlClient.dll");
1、(" System.Data.dll");多了空格
2、System.Data.SqlClient.dll是否物理存在于你的机器上,现在.net4已经没有这个库了
是的对字符串动态编译是正确的 System.Data.SqlClient.dll 好像 2、3、4下面都没有 它是System.Data命名空间下的 我查了半天有人说制定编译器的版本就好了 我试了还是不行