private void GenerateCode(Assembly assembly) { List <XmlMapping> mappings = new List <XmlMapping>(); List <Type> types = CollectXmlSerializerTypes(assembly, mappings); if (types.Count == 0) { ToolConsole.WriteWarning(SR.Format(SR.WrnNoServiceContractTypes, assembly.GetName().CodeBase)); return; } if (mappings.Count == 0) { ToolConsole.WriteWarning(SR.Format(SR.WrnNoXmlSerializerOperationBehavior, assembly.GetName().CodeBase)); return; } bool success = false; bool toDeleteFile = true; string codePath = Path.GetTempFileName(); try { if (File.Exists(codePath)) { File.Delete(codePath); } using (FileStream fs = File.Create(codePath)) { MethodInfo method = typeof(System.Xml.Serialization.XmlSerializer).GetMethod("GenerateSerializer", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); if (method == null) { throw new ToolRuntimeException(SR.GenerateSerializerNotFound); } else { success = (bool)method.Invoke(null, new object[] { types.ToArray(), mappings.ToArray(), fs }); } } } finally { if (!success && toDeleteFile && File.Exists(codePath)) { File.Delete(codePath); } } string sgenSource = XmlSerializer.GetXmlSerializerAssemblyName(types[0]); // delete all temp files generated by CodeDom except source file sgenSource = BuildFilePath(sgenSource, sourceExtension, null); if (File.Exists(sgenSource)) { File.Delete(sgenSource); } string sourceName; if (_outFile != null) { sourceName = FilenameHelper.UniquifyFileName(_outFile, sourceExtension); } else { sourceName = FilenameHelper.UniquifyFileName(sgenSource, sourceExtension); } string sourceFilePath = BuildFilePath(sourceName, sourceExtension, null); CreateDirectoryIfNeeded(sourceFilePath); File.Copy(codePath, sourceFilePath, true); ToolConsole.WriteLine(sourceFilePath); return; }