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