-deterministic

Causes the compiler to produce an assembly whose byte-for-byte output is identical across compilations for identical inputs.

Syntax

-deterministic


Remarks

By default, compiler output from a given set of inputs is unique, since the compiler adds a timestamp and a GUID that is generated from random numbers. You use the -deterministic option to produce a deterministic assembly, one whose binary content is identical across compilations as long as the input remains the same.

The compiler considers the following inputs for the purpose of determinism:

• The sequence of command-line parameters.
• The contents of the compiler's .rsp response file.
• The precise version of the compiler used, and its referenced assemblies.
• The current directory path.
• The binary contents of all files explicitly passed to the compiler either directly or indirectly, including:
• Source files
• Referenced assemblies
• Referenced modules
• Resources
• The strong name key file
• @ response files
• Analyzers
• Rulesets
• Additional files that may be used by analyzers
• The current culture (for the language in which diagnostics and exception messages are produced).
• The default encoding (or the current code page) if the encoding is not specified.
• The existence, non-existence, and contents of files on the compiler's search paths (specified, for example, by -lib or -recurse).
• The CLR platform on which the compiler is run.
• The value of %LIBPATH%, which can affect analyzer dependency loading.

When sources are publicly available, deterministic compilation can be used for establishing whether a binary is compiled from a trusted source. It can also be useful in a continuous build system for determining whether build steps that are dependent on changes to a binary need to be executed.