Staticlink vs standalone quirk с F#

#compiler-construction #f# #linker

#построение компилятора #f# #компоновщик

Вопрос:

В vs2010 ultimate edition, если вы передадите компилятору f # флаг —standalone на панели проектов, он не свяжет пустой проект C # с файлами конфигурации / файлами ресурсов

Однако он свяжет сборку, если вы явно объявите —staticlink:Config

Это похоже на ошибку … если это намеренно, могу я спросить, почему это может быть?

Ответ №1:

Это ожидаемое поведение:

  • Флаг standalone статически связывает FSharp.Core.dll (среду выполнения F #) и любые ссылочные сборки, которые зависят от него (т. Е. любые другие сборки F #). Они должны быть связаны, потому что они могут использовать некоторые типы с основной сборкой (например, F # list type и т.д.)

  • Флаг staticlink связывает любую сборку, которую вы явно указываете (и любые сборки, которые зависят от него). Это означает, что вы можете использовать опцию для ссылки, например, на библиотеку C #, на которую ссылается ваша основная сборка F #.

Я думаю, что эти два случая обрабатываются отдельно, потому что для встраивания F # runtime требуется немного особая обработка (почти весь код F # использует это каким-то образом, и компилятор, вероятно, обрабатывает это по-другому)