我尝试在运行时编译此代码。这段代码是代码优先的EF4类。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
namespace EFCodeFirst.Model.Models
{
[Table("Blog")]
public class Blog
{
public Guid Id { get; set; }
[Column("txtTitle")]
public string Title { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public string ShortTitle { get { return Title; } }
public string BloggerName { get; set; }
public virtual ICollection<Post> Posts { get; set; }
}
public class Post
{
public Guid Id { get; set; }
public string Title { get; set; }
public DateTime DateCreated { get; set; }
public string Content { get; set; }
public Guid BlogId { get; set; }
}
}
使用此方法编译给定代码。 我用一个简单的类测试了这段代码。有用。但是在给定的课程中,它根本不起作用。
private Assembly BuildAssembly(string code)
{
Microsoft.CSharp.CSharpCodeProvider provider = new CSharpCodeProvider();
ICodeCompiler compiler = provider.CreateCompiler();
CompilerParameters compilerparams = new CompilerParameters();
compilerparams.GenerateExecutable = false;
compilerparams.GenerateInMemory = true;
CompilerResults results = compiler.CompileAssemblyFromSource(compilerparams, code);
if (results.Errors.HasErrors)
{
StringBuilder errors = new StringBuilder("Compiler Errors :\r\n");
foreach (CompilerError error in results.Errors)
{
errors.AppendFormat("Line {0},{1}\t: {2}\n", error.Line, error.Column, error.ErrorText);
}
throw new Exception(errors.ToString());
}
else
{
return results.CompiledAssembly;
}
}
我得到一些像这样的例外:
error CS0234: The type or namespace name 'Linq' does not exist in the namespace 'System' (are you missing an assembly reference?)}
任何帮助?
谢谢。
答案 0 :(得分:0)
好像你没有在'compilerparams'中设置ReferencedAssemblies。 您很可能需要添加必要的程序集引用,就像在常规VS C#项目中添加一样。尝试使用以下内容在BuildAssembly方法中添加它们:
compilerparams.ReferencedAssemblies.Add("mscorlib.dll");
compilerparams.ReferencedAssemblies.Add("System.dll");
compilerparams.ReferencedAssemblies.Add("System.Core.dll");
compilerparams.ReferencedAssemblies.Add("System.Xml.dll");
compilerparams.ReferencedAssemblies.Add("EntityFramework.dll");
除此之外,请确保在要编译的代码中使用以下命名空间:using System.Data.Entity; using System.Collections.Generic; using System.ComponentModel.DataAnnotations;
这应解决有关此问题的编译问题。
答案 1 :(得分:0)
我也遇到了这个问题,并将网站从.NET 4.0升级到.NET 4.6.1,它已修复。请记住删除NUGET组件并重新安装新的.NET目标新版本。