C# 以编程方式为LINQ生成类型化数据集-“;元数据文件;丢失的
标题说明了我在努力做什么。如果我没有指定C# 以编程方式为LINQ生成类型化数据集-“;元数据文件;丢失的,c#,.net,linq,C#,.net,Linq,标题说明了我在努力做什么。如果我没有指定LinqOverTypedDatasets选项,但是我希望我的类型化数据集支持使用LINQ的查询,那么我可以成功地生成程序集 我的代码输出错误: 错误CS0006:找不到元数据文件“System.Data.DataSetExtensions.dll” 守则: //System.Data.DataSet myDataSet = << assume myDataSet is valid DataSet object >>; Dicti
LinqOverTypedDatasets
选项,但是我希望我的类型化数据集支持使用LINQ的查询,那么我可以成功地生成程序集
我的代码输出错误:
错误CS0006:找不到元数据文件“System.Data.DataSetExtensions.dll”
守则:
//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);
}
//System.Data.DataSet myDataSet=>;
字典选项=新建字典();
添加(“CompilerVersion”、“v3.5”);
使用(CSharpCodeProvider cscp=新CSharpCodeProvider(选项))
{
CodeNamespace ns=新的CodeNamespace(“DBPPS”);
CodeCompileUnit ccu=新的CodeCompileUnit();
使用(StringWriter schemaWriter=new StringWriter())
{
myDataSet.WriteXmlSchema(schemaWriter);
TypedDataSetGenerator.Generate(schemaWriter.ToString(),
中央情报局,
ns,
cscp,
TypedDataSetGenerator.GenerateOptions.LinqOverTypedDatasets
);
}
StringWriter codeWriter=新的StringWriter();
GenerateCodeFromNamespace(ns,codeWriter,new CodeGeneratorOptions());
CompilerParameters参数=新的CompilerParameters();
parameters.GenerateExecutable=false;
parameters.OutputAssembly=“DBSPPS.dll”;
parameters.referencedAssembly.Add(“System.dll”);
parameters.referencedAssembly.Add(“System.Data.dll”);
parameters.referencedAssembly.Add(“System.Xml.dll”);
parameters.referencedAssemblys.Add(“System.Data.DataSetExtensions.dll”);
CompilerResults cr=cscp.compileasemblyFromSource(参数,新字符串[]{codeWriter.ToString()});
foreach(cr.Output中的字符串msg)
控制台写入线(msg);
}
编辑:解决了这个问题,更正的代码出现在上面!:)MSDN文档在描述将编译器版本设置为3.5时是错误的。CompilerVersion的值应该是“v3.5”,而不是文档中所说的“3.5”。
当我没有引用所需的assembiles(System.dll等)时,我得到了相同的编译错误,这是通过将它们添加到CompilerParameters
对象的ReferencedAssemblys
集合中修复的。但是,当我收到关于System.Data.DataSetExtensions.dll
的错误消息时,将该程序集添加到referencedAssemblys
仍然会导致相同的错误
我注意到System.Data.DataSetExtensions.dll
不在我期望的位置(\WINDOWS\Microsoft.NET\Framework\v3.5
),而是在\Program Files\Reference assemblems\Microsoft\Framework\v3.5
中。我尝试指定完整路径,但也不起作用。我假设,因为没有为其他引用的程序集指定完整路径,所以它在GAC中找到了它们。System.Data.DataSetExtensions.dll不是这样吗?还是有别的事情发生了
感谢您的帮助。尝试调整配置,使其了解3.5-请参阅配置示例