Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以编程方式为LINQ生成类型化数据集-“;元数据文件;丢失的_C#_.net_Linq - Fatal编程技术网

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-请参阅配置示例