базовая библиотека CLI 'mscorlib' двоично несовместима с базовой библиотекой F # - PullRequest
5 голосов
/ 05 ноября 2010

Я создал веб-сайт, который берет фрагменты кода, компилирует их и запускает. Тем не менее, F # не работает на сервере. Всякий раз, когда я пытаюсь скомпилировать код F #, я получаю следующее сообщение об ошибке:

Указанная базовая библиотека CLI или библиотека по умолчанию «mscorlib» несовместима в двоичном формате с базовой библиотекой F # «C: \ Program Files (x86) \ Microsoft F # \ v4.0 \ FSharp.Core.dll». Попробуйте перекомпилировать библиотеку или сделать явную ссылку на версию этой библиотеки, которая соответствует используемой вами версии CLI.

Ошибка открытия двоичного файла 'C: \ Program Files (x86) \ Microsoft F # \ v4.0 \ FSharp.Core.dll': исключение типа 'Microsoft.FSharp.Compiler.ErrorLogger + ReportedError'.

Для ясности, это ошибка, возвращаемая компилятором, а не ошибка, возникающая при запуске кода.

Сайт отлично работает на моей машине для разработки и отлично работает на виртуальной машине, которую я развернул, чтобы помочь диагностировать проблему.

Единственное обращение Google к сообщению об ошибке заставило меня попробовать очистить установку F # / .NET безрезультатно. Я сделал ремонтную установку фреймворка и удалил / переустановил используемые мной пакеты F #.

Пример: http://dotnetpad.net/ViewPaste/ZvXBgizf70q83Fk6VmboHw

F # код компиляции: http://bitbucket.org/gobiner/.net-pad/src/tip/DotNetPad/Compilers/FSharpCompiler.cs

Ответы [ 3 ]

2 голосов
/ 05 ноября 2010

Какую командную строку вы передаете файлу fsc.exe на сервере?Пахнет, как будто вы -r -ing FSharp.Core 4.0, но mscorlib 2.0.Обязательно передайте явные ссылки на оба в командной строке.Проверьте окно вывода в Visual Studio при создании образца командной строки.

РЕДАКТИРОВАТЬ

См. Этот вопрос:

FSharp.Compiler.CodeDom для VS2008и VS2010 бок о бок

0 голосов
/ 05 ноября 2010

Ваш девайс 32 или 64 бит? Похоже, что сервер 64, и поэтому это может быть проблемой, если они разные.

0 голосов
/ 05 ноября 2010

Проверьте, с какой версией .NET вы работаете на своем компьютере разработчика по сравнению с рабочей.Самый простой способ сделать это, вероятно, распечатать System.Environment.Version.

Я подозреваю, что вы обнаружите, что ваша машина разработки использует .NET 3.5, а ваша рабочая машина использует .NET 2.0, или что-то вродетот.Проверьте, в каком пуле приложений выполняется ваше приложение, и вы можете установить версию для этого пула приложений.

...