標題說明我正在嘗試做什麼。如果我沒有指定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
不是這種情況嗎?或者還有其他事情正在發生?
感謝您的幫助。
謝謝Marc!在我編輯的帖子中看到我的筆記。 – 2008-11-24 15:19:23