Я динамически создаю сборки из webservice. После чтения исходного потока ответов (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);
}
я теперь получить сборка создана в моем временном каталоге, но мне нужен .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);
}
}