标题说明了我正在尝试做的事情。如果我不指定 LinqOverTypedDatasets
,我可以成功生成程序集选项,但我希望我的类型化数据集支持使用 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);
}
编辑:想通了,更正后的代码出现在上面! :) MSDN 文档在描述将编译器版本设置为 3.5 时是错误的。 CompilerVersion 的值应该是“v3.5”,而不是文档所说的“3.5”。
当我没有引用所需的程序集(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
不是这样吗? ?还是有其他事情发生?
感谢您的帮助。
最佳答案
尝试调整配置,使其了解 3.5 - 请参阅配置示例 here .
关于c# - 以编程方式为 LINQ 生成类型化数据集 - 缺少 "Metadata file"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/309665/