-deterministic
Powoduje, że kompilator tworzy zestaw, którego dane wyjściowe bajtu dla bajtów są identyczne w kompilacjach dla identycznych danych wejściowych.
Składnia
-deterministic
Uwagi
Domyślnie dane wyjściowe kompilatora z danego zestawu danych wejściowych są unikatowe, ponieważ kompilator dodaje znacznik czasu i identyfikator GUID generowany na podstawie liczb losowych. Możesz użyć -deterministic
opcji , aby utworzyć zestaw deterministyczny, którego zawartość binarna jest identyczna w kompilacjach, o ile dane wejściowe pozostają takie same.
Kompilator uwzględnia następujące dane wejściowe w celu determinizmu:
- Sekwencja parametrów wiersza polecenia.
- Zawartość pliku odpowiedzi rsp kompilatora.
- Dokładna wersja używanego kompilatora i jego zestawów, do których się odwołuje.
- Bieżąca ścieżka katalogu.
- Zawartość binarna wszystkich plików jawnie przekazana kompilatorowi bezpośrednio lub pośrednio, w tym:
- Pliki źródłowe
- Zestawy, do których odwołuje się odwołanie
- Moduły, do których odwołuje się odwołanie
- Zasoby
- Plik klucza silnej nazwy
- @ pliki odpowiedzi
- Analizatory
- Zestawy reguł
- Dodatkowe pliki, które mogą być używane przez analizatory
- Bieżąca kultura (dla języka, w którym są generowane komunikaty diagnostyczne i komunikaty o wyjątkach).
- Domyślne kodowanie (lub bieżąca strona kodowa), jeśli kodowanie nie jest określone.
- Istnienie, brak istnienia i zawartość plików w ścieżkach wyszukiwania kompilatora (określonych na przykład przez
-lib
lub-recurse
). - Platforma CLR, na której jest uruchamiany kompilator.
- Wartość
%LIBPATH%
, która może mieć wpływ na ładowanie zależności analizatora.
Gdy źródła są publicznie dostępne, kompilacja deterministyczna może służyć do ustalenia, czy plik binarny jest kompilowany z zaufanego źródła. Może to być również przydatne w systemie ciągłej kompilacji do określania, czy należy wykonać kroki kompilacji zależne od zmian w pliku binarnym.