去年上线的一个项目却在最近出现了个比较头疼的问题。先说明一下该系统是个业务管理系统大概会处理上百个业务每处理完一个业务都要给客户发一封确认信或者说明信信的内容是通过读取模板加替换参数方式做成的模板是文本文件当要读取一个模板的内容时先判断内存中是否有该模板如果有就直接从内存中读取如果没有则从文件读入并放入到内存中内存中是放到Hashtable中的key为枚举类型也就是为每一种模板定义了一个枚举值。问题就出在模板内容这里明明是办理的A业务结果却给客户发的是关于B业务的相关说明。为什么说头疼呢因为这个错误只在最终客户那里出现过在组内及中间客户的环境中均不能再现而且再最终客户处也是时隐时现。……经过数日的调查也未见所以然啊最后迫不得已从最终客户处要来了相关的dll文件和log才发现了问题的所在。原来通过查看IL代码发现很多引用的枚举值都变了比如代码中引用的是A类型的信结果在IL代码中却变成了B类型。究其原因大家都知道枚举值就是个整数代码编译后DLL中只保留该枚举的整数值而如果枚举本身有变化的话比如在中间加入了一项值那么该项后面枚举的值都会改变的如果不是显示指定值的话。这个时候如果只重新编译了枚举本身而没有编译各个引用枚举的地方的话那么就会出现张冠李戴的问题。我们的问题就出在这里当时为了对应一个bug在枚举中间加了一个值而只编译了与这个bug有关的工程其他的引用的地方都没有编译所以才……