今天学习 C#,写了一个用反射把类库里面的类和方法输出到一个XML文件中。方案写完后,输出到XML文件的内容不完整。代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; using System.Xml; using System.IO;
namespace LearningCSharpByExample { class LookingAtAssembly : IEntryPoint { /// /// Entries the point. /// public void EntryPoint() { Assembly assembly = Assembly.LoadFrom("E:\\VisualStudioProj\\ChouyTest\\NHibernateTest\\bin\\NHibernate.dll"); XmlDocument doc = new XmlDocument(); doc.AppendChild(doc.CreateXmlDeclaration("1.0", "utf-8", null)); XmlElement nhibernnatedoc = doc.CreateElement("NHibernateTestDoc"); foreach (Module module in assembly.GetModules()) { XmlElement moduleEle = doc.CreateElement("module"); moduleEle.SetAttribute("name", moduleEle.Name); Type[] types = module.FindTypes(null, null); foreach (Type type in types) { XmlElement typeEle = doc.CreateElement("type"); /* 代码段1 if (type.Name.Equals("BulkOperationCleanupAction")) { Console.WriteLine("break"); break; } */ typeEle.SetAttribute("name", type.Name); MemberInfo[] memberInfoArray = type.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); foreach (MemberInfo memberInfo in memberInfoArray) { XmlElement memberEle = doc.CreateElement("member"); memberEle.AppendChild(doc.CreateTextNode(memberInfo.Name)); typeEle.AppendChild(memberEle); } moduleEle.AppendChild(typeEle); } nhibernnatedoc.AppendChild(moduleEle); } doc.AppendChild(nhibernnatedoc); /* 代码段2 using (XmlTextWriter writer = new XmlTextWriter(new StreamWriter("c:\\nhibernate.xml"))) { writer.Formatting = Formatting.Indented; // doc.WriteTo(new XmlTextWriter(Console.Out)); doc.WriteContentTo(writer); } */
/* 代码段3 */ XmlTextWriter writer = new XmlTextWriter(new StreamWriter("c:\\nhibernate.xml")); writer.Formatting = Formatting.Indented; doc.WriteContentTo(writer);
/* 代码段4 */
// writer.dispose(); writer.flush();
/* 代码段4 结束*/
/* 代码段3 结束*/
} } }
|
代码段3的程序这么看没有什么问题,但输出文件最后部分总是没有。
我以为是文件太大,输出不了。于是我加上了代码段2,后面很长的就不往XML文件里输出了,这样整个文件里连内容都没有;我又换了另一个DLL文件,也不行。问题很奇怪。
我又把这部分重写了,用代码段2替换了代码段3,就没问题了。分析一下,代码段2只是会自动调用 writer 的 dispose() 方法,我在代码段3里没调。问题差不多明白了,可能是因为 writer 对象缓存了一些数据没有输出造成的。于是我在代码段3中加入了代码段4,文件可以全部输出了。
还是要使用 using 释放资源呀,不然会有些奇怪的问题的。
阅读(2335) | 评论(0) | 转发(0) |