2012-04-27 4 views
1

実行時にこのコードをコンパイルしようとしています。このコードはコードファーストのEF4クラスです。実行時にコードファースト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; } 
    } 
} 

与えられたコードをコンパイルするこのメソッドを使用します。 私はこのコードを単純なクラスでテストしました。できます。与えられたクラスでは、まったく動作しません。

error CS0234: The type or namespace name 'Linq' does not exist in the namespace 'System' (are you missing an assembly reference?)} 

すべてのヘルプ:

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; 
      } 
     } 

と私はこのようないくつかの例外を取得していますか?

ありがとうございます。

答えて

0

「compilerparams」ReferencedAssembliesが設定されていないようです。 ほとんどの場合、通常のVS C#プロジェクトで追加するのと同様に、必要なアセンブリ参照を追加する必要があります。 using System.Data.Entity; using System.Collections.Generic; using System.ComponentModel.DataAnnotations;これは、この問題に関するあなたのコンパイルの問題を解決する必要があります:あなたがコンパイルするコードに次の名前空間usingsを持っていることを確認し、このほかに

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");

:ようなものを使用してBuildAssembly方法でそれらを追加してみてください。

+0

私はこれらのコードを追加しました compilerparams.ReferencedAssemblies.Add( "mscorlib.dll"); .Add( "System.dll"); .Add( "System.Core.dll"); .Add( "System.Xml.dll"); .Add( "System.ComponentModel.DataAnnotations.dll"); これらのエラーが発生しました。 型または名前空間の名前 'Column'が見つかりませんでした "" "'ColumnAttribute'が見つかりません " "" 'DatabaseGenerated'が見つかりませんでした "" "'DatabaseGeneratedAttribute'が見つかりませんでした "" "'テーブル'が見つかりませんでした " "" 'TableAttribute'が見つかりませんでした コンパイラはいくつかのEFクラスを知らないようです。 – PickleRick

+0

compilerparams.ReferencedAssemblies.Add( "EntityFramework.dll")のようなコンパイラパラメータにEF参照を追加し、コンパイルするコードに次の名前空間を使用していることを確認する必要があります。using System.Data.Entity ; using System.ComponentModel.DataAnnotations; "私もこれを含むように私の答えを更新しました。 –

0

また、この問題を解決し、WebサイトをNET 4.0からNET 4.6.1にアップグレードしました。これは修正されました。 NUGETコンポーネントを削除し、新しいNETターゲットの新しいバージョンに再インストールすることを忘れないでください。

関連する問題