Не можете загрузить FSharp.Core версии 4.0.0 в infer.net fun // зависимость жесткой ссылки в dll? - PullRequest
3 голосов
/ 10 марта 2012

Я пробую Infer.Net ( Библиотека F # для вероятностного программирования ) И запуск примеров в VS11 Beta приводит к ошибке:

Не удалось загрузить файл или сборку 'FSharp.Core, версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a 'или один из ее зависимостей. Система не может найти указанный файл.

Если я открою dll, использовавший образцы infer.net в Reflector, один, probcomp.dll, скажет, что не может автоматически найти «FSharp.Core, Version = 4.0.0.0» и что мне нужно выбрать местоположение вручную .

Две вещи связаны? Возможно ли, что probcomp.dll был скомпилирован со ссылкой «фиксированный путь» и что теперь это не совпадает на моей машине?

PS: конечно проекты fsharp с нуля работают нормально ..

PS2: dll, на которую ссылаются в visual studio, не показывает никаких признаков того, что они не найдены. И я могу открыть их в браузере объектов.

UPDATE

Ошибка происходит сильно при запуске программы, нет времени что-либо видеть. Тем не менее, это происходит внутри программы: если следующая строка не называется

let coinsD = inferExpr <@ coins @> 

Тогда ошибок не бывает. При этом возникает следующая ошибка, в другом примере Неудивительно, что именно от dll поведение странного в отражателе было странным.

Не удалось загрузить файл или сборку 'FSharp.Core, версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a 'или один из ее зависимостей. Определение манифеста обнаруженной сборки не соответствовать справочному номеру сборки . (Исключение из HRESULT: 0x80131040)

Подпись указанной функции довольно странно в браузере объектов:

public static IDistribution<b>inferExpr<b>(**unknown-type e**)

ДА, в отражателе после Я сказал ему, где найти Fsharp 4.0.0 при открытии dll, у него есть подпись

public static IDistribution<b> inferExpr<b>(FSharpExpr<b> e);

Эта dll должна иметь какие-то странные зависимости жестких ссылок, а рефлектор умнее (или нет ..), чем VS, чтобы понять это.

Чтобы сделать хорошее из плохого, если у вас есть какое-либо представление о том, что могло бы произойти в этой dll, это может быть поводом для изучения.

Ответы [ 2 ]

8 голосов
/ 10 марта 2012

Файл app.config с

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
          <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a"
                            culture="neutral"/>
          <bindingRedirect oldVersion="4.0.0.0" newVersion="4.3.0.0"/>
        </dependentAssembly>
      </assemblyBinding>
    </runtime>
</configuration>

все исправит.

3 голосов
/ 10 марта 2012

Я могу запустить этот пример в VS11, ориентируясь на .NET 4.0 и используя FSharp.Core 4.0.0.0.Я сталкиваюсь с ошибкой при нацеливании на .NET 4.5 и изменении FSharp.Core на 4.3.0.0 версию.

Так что проблема не в жестких зависимостях между библиотеками.Изменение Target Framework в Свойства проекта в .NET 4.0 и осторожное добавление FSharp.Core 4.0.0.0 в диалоге Reference (обратите внимание, что существуют различные версии FSharp.Coreдоступно) решит проблему.

В вашем случае, поскольку среда выполнения F # 2.0 отсутствует, сначала установите ее, прежде чем выполнять вышеуказанный шаг.

...