저는 웹 서비스로부터 어셈블리를 동적으로 생성하고 있습니다. 초기 응답 스트림 (WSDL)을 읽은 후 ServiceDescriptionImporter와 ServiceDescription을 사용하여 스트림을 가져오고 컴파일을 위해 CodeDomProvider를 사용합니다.Webservice에서 동적으로 생성 된 어셈블리 - 런타임에 .CS 코드를 얻는 방법?
수입
ServiceDescriptionImporter descriptionImporter = new ServiceDescriptionImporter();
ServiceDescription serviceDescription = ServiceDescription.Read(xmlreader);
descriptionImporter.AddServiceDescription(serviceDescription, null, null);
descriptionImporter.Style = ServiceDescriptionImportStyle.Client;
descriptionImporter.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties;
컴파일
CodeCompileUnit codeUnit = new CodeCompileUnit();
CodeNamespace codeNamespace = new CodeNamespace();
codeUnit.Namespaces.Add(codeNamespace);
ServiceDescriptionImportWarnings importWarnings = descriptionImporter.Import(codeNamespace, codeUnit);
if (importWarnings == 0)
{
results = compiler.CompileAssemblyFromDom(parameters, codeUnit);
}
지금 어셈블리 내 임시 디렉토리에 생성 얻을하지만 난합니다 (wsdl.exe 도구가 만든 것 같은) 코드로 .CS 파일이 필요합니다 . 어셈블리를 만들지 않고 CS 코드 만 만들 수있는 방법이 있습니까?
변환되기 전에 XML 스트림에 액세스 할 수 있지만 이는 WSDL 만입니다. 내 CodeDomProvider의 코드를 만들려고하지만, 그것은 단지 당신은 "GenerateCodeFromCompileUni"방법으로 compileUnit (안 된 CodeDom)의 코드를 추출 할 수 있습니다
private void CreateCSCode(string FilePathName, CodeDomProvider provider)
{
CodeGeneratorOptions options = new CodeGeneratorOptions();
options.BracingStyle = "C";
using (StreamWriter sourceWriter = new StreamWriter(FilePathName))
{
provider.GenerateCodeFromCompileUnit(new System.CodeDom.CodeCompileUnit(), sourceWriter, options);
}
}