2008-11-21 36 views
3

標題說明我正在嘗試做什麼。如果我沒有指定LinqOverTypedDatasets選項,我可以成功生成程序集,但是我希望我的類型化DataSet支持LINQ查詢。以編程方式爲LINQ生成類型化數據集 - 「元數據文件」缺失?

我的代碼輸出錯誤:

error CS0006: Metadata file 'System.Data.DataSetExtensions.dll' could not be found

代碼:

//System.Data.DataSet myDataSet = << assume myDataSet is valid DataSet object >>; 

Dictionary<string, string> options = new Dictionary<string, string>(); 
options.Add("CompilerVersion", "v3.5"); 

using (CSharpCodeProvider cscp = new CSharpCodeProvider(options)) 
{ 
    CodeNamespace ns = new CodeNamespace("DBSPPS"); 
    CodeCompileUnit ccu = new CodeCompileUnit(); 

    using (StringWriter schemaWriter = new StringWriter()) 
    { 
     myDataSet.WriteXmlSchema(schemaWriter); 
     TypedDataSetGenerator.Generate(schemaWriter.ToString(), 
      ccu, 
      ns, 
      cscp, 
      TypedDataSetGenerator.GenerateOption.LinqOverTypedDatasets 
      ); 
    } 

    StringWriter codeWriter = new StringWriter(); 

    cscp.GenerateCodeFromNamespace(ns, codeWriter, new CodeGeneratorOptions()); 

    CompilerParameters parameters = new CompilerParameters(); 
    parameters.GenerateExecutable = false; 
    parameters.OutputAssembly = "DBSPPS.dll"; 
    parameters.ReferencedAssemblies.Add("System.dll"); 
    parameters.ReferencedAssemblies.Add("System.Data.dll"); 
    parameters.ReferencedAssemblies.Add("System.Xml.dll"); 
    parameters.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll"); 

    CompilerResults cr = cscp.CompileAssemblyFromSource(parameters,new string[]{ codeWriter.ToString() }); 

    foreach (string msg in cr.Output) 
     Console.WriteLine(msg); 
} 

編輯:想通了這一點,更正後的代碼出現以上! :)當描述將編譯器版本設置爲3.5時,MSDN文檔是錯誤的。如文檔所述,CompilerVersion的值應該是「v3.5」而不是「3.5」。

我時,我並沒有提及需要assembiles(System.dll中,等等),這是固定通過將它們添加到ReferencedAssemblies集合CompilerParameters對象相同的編譯錯誤。但是,當我收到有關System.Data.DataSetExtensions.dll的錯誤消息時,將該程序集添加到ReferencedAssemblies仍然導致相同的錯誤。

我注意到System.Data.DataSetExtensions.dll不在我預期的位置(\WINDOWS\Microsoft.NET\Framework\v3.5),但在\Program Files\Reference Assemblies\Microsoft\Framework\v3.5。我試圖指定完整的路徑,也沒有工作。我認爲,由於沒有爲其他引用程序集指定完整路徑,因此它在GAC中找到了它們。 System.Data.DataSetExtensions.dll不是這種情況嗎?或者還有其他事情正在發生?

感謝您的幫助。

回答

1

嘗試調整配置,使其知道約3.5 - 請參閱配置示例here

+0

謝謝Marc!在我編輯的帖子中看到我的筆記。 – 2008-11-24 15:19:23

相關問題