对于相同的输入,确保编译器生成的程序集在每次编译中其逐字节输出都相同。
语法
-deterministic
注解
默认情况下,来自给定输入集的编译器输出是唯一的,因为编译器会添加时间戳和从随机数生成的 GUID。 使用 -deterministic
选项生成确定性的程序集,只要输入保持不变,该程序集的二进制内容在整个编译中都是相同的。
编译器出于确定性考虑以下输入:
- 命令行参数序列。
- 编译器 .rsp 响应文件的内容。
- 所用编译器的精确版本及其引用的程序集。
- 当前目录路径。
- 直接或间接地显式传递到编译器的所有文件的二进制内容,包括:
- 源文件
- 引用的程序集
- 引用的模块
- 资源
- 强名称密钥文件
- @ 响应文件
- 分析器
- 规则集
- 分析器可能使用的其他文件
- 当前语言文化(用于生成诊断和异常消息所用的语言)。
- 如果未指定编码,则为默认编码(或当前代码页)。
- 编译器搜索路径(例如,由
-lib
或-recurse
指定)上文件的存在性、不存在性及其内容。 - 运行编译器的 CLR 平台。
-
%LIBPATH%
的值,该值会影响分析器的依赖项加载。
当源公开可用时,确定性编译可用于确定是否从受信任的源编译二进制文件。 在持续生成系统中,它还可用于确定是否需要执行依赖于二进制文件的更改的生成步骤。