В библиотеке F # модули инициализируются с помощью статических конструкторов, которые обеспечивают инициализацию до использования любых значений модуля. Напротив, в исполняемом файле F # эта инициализация выполняется в точке входа приложения. Это означает, что если другая сборка ссылается на приложение F # (независимо от языка, на котором написано другое приложение), код инициализации не будет запущен.
UPDATE
Брайан указал мне на эту часть спецификации , что указывает на то, что это ожидаемое поведение.
Похоже, что одним из обходных путей может быть предоставление явной точки входа, например:
[<EntryPoint>]
let main _ =
0
Затем вы можете вызвать этот основной метод из своего приложения C #, чтобы убедиться, что содержимое модуля правильно инициализировано.
ОБНОВЛЕНИЕ 2
Я неправильно читал спецификацию - вам не нужно фактически вызывать явную точку входа из ссылочной сборки. Его простое присутствие приведет к правильной инициализации.