2008-11-21 3 views
3

제목은 내가 무엇을하려하는지 말합니다. LinqOverTypedDatasets 옵션을 지정하지 않으면 성공적으로 어셈블리를 생성 할 수 있지만 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"이어야합니다.

CompilerParameters 개체의 ReferencedAssemblies 컬렉션에 추가하여 수정 된 필수 어셈블리 (System.dll 등)를 참조하지 않았을 때 동일한 컴파일 오류가 발생했습니다. 그러나 System.Data.DataSetExtensions.dll에 대한 오류 메시지가 나타나면 ReferencedAssemblies에 해당 어셈블리를 추가해도 여전히 같은 오류가 발생합니다.

내가 이 (\WINDOWS\Microsoft.NET\Framework\v3.5)이 될 것으로 예상했지만, \Program Files\Reference Assemblies\Microsoft\Framework\v3.5 인 것으로 나타났습니다. 전체 경로를 지정하려고 시도했으나 작동하지 않았습니다. 전체 경로가 다른 참조 된 어셈블리에 대해 지정되지 않았으므로 GAC에서 해당 어셈블리를 찾았습니다. System.Data.DataSetExtensions.dll에 해당하지 않습니까? 아니면 다른 일이 있습니까?

도움 주셔서 감사합니다.

답변

1

구성을 조정하면 약 3.5가됩니다. 구성 예 here을 참조하십시오.

+0

감사합니다. Marc! 내 편집 게시물에서 내 메모를 참조하십시오. –

관련 문제