c# - 以编程方式为 LINQ 生成类型化数据集 - 缺少 "Metadata file"?

标签 c# .net linq

标题说明了我正在尝试做的事情。如果我不指定 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/

相关文章:

c# - 读取 xml 子树和后代 C#

c# - ConnectionStrings 或 AppSettings 的存储库

c# - 我应该假设发件人可以为空吗?

.net - 使用 ILMerge 创建签名库抛出异常

c# - LINQ 根据列表查询字典

c# - Linq To Entities 内部转换

c# - 在csproj中使用appdata环境变量

c# - 无需服务器即可存储在文件中的最佳数据库系统选项?

c# - 更新 IEnumerable<> 中的对象不更新?

linq - 使用 "Contains"时忽略 LINQ 中的尖音符号