2014-01-20 4 views
24

Оба файла, похоже, находятся в каталоге F # вместе с FSharp.Core.dll. Оба файла кажутся постоянным источником проблем, если вы забываете их сопоставлять с FSharp.Core.dll. Кажется, они двоичные файлы, поэтому я не смог раскрыть их цель.Что такое файлы FSharp.Core.optdata и FSharp.Core.sigdata F #?

Я немного поработал над обоими файлами, но, похоже, нет четкого ответа на мой вопрос. Итак ... Какова их функция в F #?

+0

Я думаю, что это связано с данными оптимизации и может быть подавлено '--nooptimizationdata' –

+0

Это не похоже на правду. У меня были сбои приложений без этих двух файлов, поэтому я поместил их в выходной каталог. Я попытался запустить его с этим флагом и без файлов, и он снова разбился. :( –

+2

Это так странно. Я просто сделал пакет F # NuGet с включенным FSharp.Core.dll. Если пакет используется в проекте библиотеки F #, этот проект не будет компилироваться, если не включены файлы .sigdata и .optdata (в пакете NuGet), но только файлы FSharp.Core.dll и ** не ** файлы sig/optdata включены в каталог выпуска библиотеки, и все без проблем работает нормально. В этом случае кажется, что они нужны только во время компиляции. –

ответ

17

Optdata определенно данные оптимизации, он написан как часть функции EncodeOptimizationData в компиляторе. FSharp.Core имеет эту информацию, хранящуюся во внешнем файле, а не встроенную в манифест ресурса.

sigdata кодируется EncodeInterfaceData и содержит информацию о сигнатурах/интерфейсах для типов F #. FSharp.Core, FSharp.Compiler.Silverlight и FSharp.LanguageService.Compiler все эти данные хранятся во внешнем файле, а не встроены в манифест ресурса.

Поскольку FSharp.Core не содержит ни одного из них в манифесте ресурса, они должны присутствовать снаружи, но я не уверен в этой причине.

Созданные пользователем файлы F #, если они скомпилированы, содержат эту информацию в манифесте ресурса, вы можете увидеть это, если вы посмотрите на метаданные.

+2

Справа. Другими словами, 'SigData' и' OptData' всегда компилируются в сборки F # в качестве управляемых ресурсов, если вы не указали флаг, например '--nooptimizationdata'. Я не уверен, почему, но 'FSharp.Core' сбрасывает эти ресурсы во внешние файлы (' FSharp.Core.sigdata' и 'FSharp.Core.optdata'); когда вы пытаетесь скомпилировать проект F #, который ссылается на другую сборку F # (например, 'FSharp.Core'), компилятору F # требуется эта информация - если она не встроена в ссылочную сборку в качестве управляемого ресурса, она ищет внешние файлы. Если он тоже не может найти, компиляция завершится с ошибкой. –

Смежные вопросы