.NET反编译类修改是否合规?求Visual Studio更优方案
问题解答
关于当前方法的正确性
你现在直接修改临时目录里的反编译文件,仅能临时生效,但并不规范也不可靠:
- 这些
C:\User\name\AppData\Local\Temp\MetadataAsSource(guid id)\DecompilationMetaDataAsSourceFileProvider(guid id)\decompiled.cs这类路径下的文件是Visual Studio为展示元数据自动生成的临时文件,一旦清理系统临时文件、重启VS或重新加载项目,所有修改都会丢失。 - 这种修改并没有真正改变项目依赖的程序集,只是在VS的临时反编译视图中临时生效,无法作为长期解决方案。
Visual Studio中的更优修改方式
根据你的场景(反向移植新增枚举值,目标枚举属于序列化类),推荐两种规范的方式:
1. 若目标枚举所在程序集为自有代码(可获取源代码)
直接找到该程序集的原始项目,在枚举中新增目标值后重新编译,将编译后的新程序集替换旧版本项目中的引用即可。这是最严谨的方式,能确保所有依赖该程序集的模块都能获取到正确的枚举定义。
2. 若目标枚举所在程序集无法获取源代码(第三方/只读程序集)
利用Visual Studio的反编译代码导出功能,将枚举代码本地化到项目中:
- 在解决方案资源管理器中找到引用的目标程序集,展开后定位到需要修改的枚举。
- 右键点击该枚举,选择**“查看反编译代码”**。
- 在打开的反编译窗口顶部,点击**“复制到项目”**按钮,将枚举的完整代码复制到你的项目中(必须保持命名空间、枚举名称和原有枚举值完全一致)。
- 在本地复制的枚举文件中新增需要的枚举值,此时项目会优先使用本地定义的枚举,取代原程序集中的版本,修改会持久保存在项目代码中,不会丢失。
注意:因为是序列化场景,若原枚举使用了DataContract等序列化特性,记得给新增的枚举值添加对应的[EnumMember]属性,避免出现序列化/反序列化异常。
内容的提问来源于stack exchange,提问作者Richard Brescher
相关产品推荐
相关产品推荐

