제목은 내가 무엇을하려하는지 말합니다. 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
에 해당하지 않습니까? 아니면 다른 일이 있습니까?
도움 주셔서 감사합니다.
감사합니다. Marc! 내 편집 게시물에서 내 메모를 참조하십시오. –