删除 C# 二进制文件中未使用的预处理器符号

Posted

技术标签:

【中文标题】删除 C# 二进制文件中未使用的预处理器符号【英文标题】:remove unused preprocessor symbols in c# binary 【发布时间】:2017-08-22 21:42:29 【问题描述】:

我有一个带有一些条件构建的项目。我编译它。然后用dotpeek看了一下。我注意到 ALL 条件语句和它包装的代码,即使没有定义。

由于此应用程序针对不同的客户端以某些关键方式进行了修改,因此我希望该客户端的构建具有一个 包含已定义的活动 #ifs 的二进制文件。

如何进行自动化构建来实现这一目标?

【问题讨论】:

请分享一些带有条件语句的小代码,DotPeek 能够从已编译的二进制文件中恢复,这些代码可以在我们这边重现。 【参考方案1】:

dotPeek 做了两件事

    可以反编译IL代码 它可以读取PDB文件并查找源文件

您可以在上下文菜单中看到这一点。一项是“反编译的源代码”,另一项是“来自符号文件的源代码”

通过双击一个项目,它会首先尝试执行操作2,即:显示您硬盘上存在的源文件。

这是一个非常简单的程序:

左:来自符号文件的源代码 中间:反编译的源代码 右:IL 代码

如您所见,编译后的代码只包含编译后的那些部分。

因此,无需在构建脚本中剥离这些部分,因为 DLL 或 EXE 不包含它。

【讨论】:

以上是关于删除 C# 二进制文件中未使用的预处理器符号的主要内容,如果未能解决你的问题,请参考以下文章

c#网络通信框架networkcomms内核解析之六 处理接收到的二进制数据

C#处理二进制文件,多线程处理

C# 读写二进制文件

链接 与 加载

C# 十进制文字符号中的 M 代表啥?

Xcode 7 中未找到解析 UI 错误