如何解决为CodeDomProvider添加对linq的引用
我需要在C#中编译动态代码 但有错误: “错误CS0234:类型或名称空间名称'Linq'在名称空间'System'中不存在(您是否缺少程序集引用?)”
在pResults.Errors
中我的代码是:
try {
var className = "test1234";
CodeNamespace ns = new CodeNamespace(className);
CodeTypeDeclaration formulaClass =
new CodeTypeDeclaration(className) {
Attributes = MemberAttributes.Public
};
var constructor = new CodeConstructor { Attributes = MemberAttributes.Public };
formulaClass.Members.Add(constructor);
#region generate method
var formula = @"List<string> UsedValues1 = new List<string>();
for (int i = 0; i < 10; i++)
{
UsedValues1.Add((i * i).ToString());
}
var ttt = UsedValues1.FirstOrDefault(x => x.Contains(""2""));
return ttt;
";
var method = new CodeMemberMethod {
ReturnType = new CodeTypeReference(typeof(string)),Name = $"M{1}",Attributes = MemberAttributes.Public
};
method.Statements.Add(new CodeSnippetExpression($"{formula};"));
#endregion
formulaClass.Members.Add(method);
ns.Types.Add(formulaClass);
var pUnit = new CodeCompileUnit();
pUnit.Namespaces.Add(ns);
var pParams = new CompilerParameters {
GenerateInMemory = true,};
var provider = CodeDomProvider.CreateProvider("csharp");
var pResults = provider.CompileAssemblyFromDom(pParams,pUnit);
var sw = new StringWriter();
provider.CreateGenerator(sw).GenerateCodeFromNamespace(ns,sw,new CodeGeneratorOptions() {
});
var q = sw.ToString();
if (pResults.Errors != null && pResults.Errors.Count > 0) {
return;
}
var GeneratedClass =
pResults.CompiledAssembly.CreateInstance($"{ns.Name}.{formulaClass.Name}");
var methodParams = new List<double[]>();
var ExecResult = (string)GeneratedClass.GetType().InvokeMember($"M{1}",BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod,null,GeneratedClass,methodParams.ToArray());
}
catch (Exception e) {
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。