0

Web サービスからアセンブリを動的に作成しています。初期応答ストリーム (WSDL) を読み取った後、ServiceDescriptionImporter を ServiceDescription と共に使用してストリームを取得し、CodeDomProvider をコンパイル用に取得します。

輸入業者

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);
}

一時ディレクトリにアセンブリが作成されましたが、コードを含む .CS ファイルが必要です (wsdl.exe ツールが作成するように)。アセンブリを作成せず、CS コードのみを作成する方法はありますか?

変換前の XML ストリームにアクセスできますが、それは WSDL だけです。CodeDomProvider からコードを作成しようとしましたが、空のファイルしか作成されません

    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);
        }
    }
4

1 に答える 1