-确定性

对于相同的输入,确保编译器生成的程序集在每次编译中其逐字节输出都相同。

语法

-deterministic

注解

默认情况下,来自给定输入集的编译器输出是唯一的,因为编译器会添加时间戳和从随机数生成的 GUID。 使用 -deterministic 选项生成确定性的程序集,只要输入保持不变,该程序集的二进制内容在整个编译中都是相同的。

编译器出于确定性考虑以下输入:

  • 命令行参数序列。
  • 编译器 .rsp 响应文件的内容。
  • 所用编译器的精确版本及其引用的程序集。
  • 当前目录路径。
  • 直接或间接地显式传递到编译器的所有文件的二进制内容,包括:
    • 源文件
    • 引用的程序集
    • 引用的模块
    • 资源
    • 强名称密钥文件
    • @ 响应文件
    • 分析器
    • 规则集
    • 分析器可能使用的其他文件
  • 当前语言文化(用于生成诊断和异常消息所用的语言)。
  • 如果未指定编码,则为默认编码(或当前代码页)。
  • 编译器搜索路径(例如,由-lib-recurse 指定)上文件的存在性、不存在性及其内容。
  • 运行编译器的 CLR 平台。
  • %LIBPATH% 的值,该值会影响分析器的依赖项加载。

当源公开可用时,确定性编译可用于确定是否从受信任的源编译二进制文件。 在持续生成系统中,它还可用于确定是否需要执行依赖于二进制文件的更改的生成步骤。

另请参阅