0

私が達成しようとしているのは、私が生成したC#クラスからプロジェクトを動的に生成することです。 このクラスのコンテンツは、次のように実体framework.Theコンテンツのコード最初のコード生成の同様のコンテンツが見えます:ファイルからアセンブリをコンパイルするときにネームスペースが見つかりません

namespace ElasticTables 
{ 
    using System; 
    using System.ComponentModel; 
    using System.ComponentModel.DataAnnotations; 
    using System.ComponentModel.DataAnnotations.Schema; 
    using System.ComponentModel.DataAnnotations.KeyAttribute; 

    [Table("address")] 
    public partial class address 
    { 

     [Key] 
     public decimal id { get; set; } 

     public string name { get; set; } 
    } 
} 

私は私のデータベース内のテーブルからこのファイルを生成し、その後、プログラムをコンパイルしよう生成されたプロジェクトをAPIで動作する別のプロジェクトで参照することができます。

主なエラーをコンパイル中には、次のとおりです。

型または名前空間名「KeyAttribute」が「System.ComponentModel.DataAnnotations」の名前空間に存在しない

(あなたはアセンブリ参照が不足しています?)

タイプまたは名前空間 'Key'が見つかりませんでした

タイプまたは名前空間 'テーブル'が見つかりませんでした。

私は「CSharpCodeProvider」

var provider = new CSharpCodeProvider(); 
    var options = new CompilerParameters 
    { 
     OutputAssembly = "ElasticTables.dll", 
     CompilerOptions = "/optimize" 
    }; 

を使用していると私は、次のように参照アセンブリ

options.ReferencedAssemblies.Add(Directory.GetCurrentDirectory() + "\\EntityFramework.dll"); 
options.ReferencedAssemblies.Add(Directory.GetCurrentDirectory() + "\\EntityFramework.SqlServer.dll"); 

私はソースと呼ばれるファイルのパスを持つ文字列配列を持っている、と私は試してみます次の行でコンパイルします。

CompilerResults results = provider.CompileAssemblyFromFile(options, sources); 

ヘルプは大歓迎です。約

options.ReferencedAssemblies.Add("System.dll"); 
options.ReferencedAssemblies.Add("System.ComponentModel.DataAnnotations.dll"); 

その他が必要になる可能性があります

+0

、アセンブリが作成されたディレクトリに? 'OutputAssembly'パラメータで指定しますか?ありがとう。 –

答えて

0

は、あなたが追加する必要があるので、私は非常に少なくとも、と言うだろう、(エラーが言うように)必要なすべてのアセンブリを参照する必要がありますあなたの質問にコメント、はい、あなたは生成されたコードで、またoptions.OutputAssembly

を指定する必要があります。

using System.ComponentModel.DataAnnotations.KeyAttribute; 

KeyAttributeは名前空間ではないため、コンパイル時にエラーが発生する可能性があります。

またusingsの前にの名前空間を使用します。これは厳密には必要ではなく、エラーではありませんが、それは一般的な方法です(参照されているアセンブリはglobal名前空間であることを確信しています。 )

+0

あなたの答えはうまくいった。私はこのアセンブリがどこに置かれているか(ディレクトリ)、おそらく.NETフレームワークフォルダにあるのか分からないのですか? –

+0

完全パスを指定しない限り、参照されているアセンブリはGAC(グローバルアセンブリキャッシュ)で検索されます。通常は%windir%\ Microsoft.NET \ assembly \ GAC_ [32 | 64]です。 GACについての詳細は[MSDN](https://msdn.microsoft.com/en-us/library/yf1d93sz(v = vs.110).aspx)を参照してください。 – Jcl

+0

フィードバックありがとう:) –

0

"System.dll"と "System.ComponentModel.DataAnnotations.dll"(System.ComponentModelのもの)の参照も追加しようとしましたか? (あなたが実際にアセンブリ参照が不足してすることができるよう)ところで

options.ReferencedAssemblies.Add(
    Path.Combine(
    Directory.GetCurrentDirectory(), 
    "System.ComponentModel.DataAnnotations.dll")); 
+0

ええ、私の答えはおそらく十分ではありません! :-) – Jcl

関連する問題