Зависимость System.Xml.Linq от неподписанного System.Core

В исполняемом файле F#, предназначенном для .NET Framework 4.6.2, файл XML загружается, изменяется и затем сохраняется обратно на диск через System.Xml.Linq:

let doc = XDocument.Load apiDoc
...file is modified....
doc.Save apiDoc

После переноса проекта из Visual Studio 2015 в Forge/FAKE/IonIDE с помощью:

  • окна SDK-10.0 10.0.26624
  • визуалфшарптулс 4.0
  • инструменты для сборки Microsoft 15.0.26228.0
  • визуальный код студии 1.11.2

Встречается следующая ошибка:

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or 
assembly 'System.Core, Version=3.5.0.0, Culture=neutral, 
PublicKeyToken=null' or one of its dependencies. The system cannot find the 
file specified.
   at System.Xml.Linq.XText.WriteTo(XmlWriter writer)
   at System.Xml.Linq.XElement.WriteTo(XmlWriter writer)
   at System.Xml.Linq.XElement.WriteTo(XmlWriter writer)
   at System.Xml.Linq.XElement.WriteTo(XmlWriter writer)
   at System.Xml.Linq.XDocument.WriteTo(XmlWriter writer)
   at System.Xml.Linq.XDocument.Save(XmlWriter writer)
   at System.Xml.Linq.XDocument.Save(String fileName, SaveOptions options)
   at System.Xml.Linq.XDocument.Save(String fileName)
   at Migrate.main(String[] argv) in c:\Projects\Migration\src\app\Migration\Migrate.fs:line 133

Я попытался добавить следующее перед загрузкой документа с той же ошибкой:

Assembly.Load("System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") |> ignore

Примечания:

  • Версии Framework 3.5 и 4.5.2–4.7 устанавливаются на компьютере для разработки под управлением Windows 10.
  • Идентичное поведение происходит на сервере Windows 2012 R2 с установленными версиями Framework 3.5 и 4.5.2–4.6.2.
  • FSharp.Core.dll распространяется вместе с исполняемым файлом.

Это меня смущает, так как 4.6.2 не имеет зависимости от 3.5, а ожидаемая ссылка, указанная в ошибке, не имеет строгого имени.


person Vern DeHaven    schedule 15.05.2017    source источник


Ответы (2)


Это был случай, когда я изучал VSCode/Ionide. При первой настройке проекта System.Xml.Linq не разрешился. Я сделал ошибку, добавив его в файл paket.references без ограничения версии. Это побудило Paket извлечь пакет Mono. Будучи пакетом версии 3.5, он имеет неявную зависимость от System.Core версии 3.5.

После удаления пакета из проекта и последующего использования предполагаемой команды F#: Add Reference в Ionide в проект была добавлена ​​правильная ссылка 4.6.2 Framework.

person Vern DeHaven    schedule 15.05.2017

Для тех, кто работает со скриптом FSharp, вы можете сослаться на сборку, а затем открыть System.Xml.Linq:

#r "System.Xml.Linq.dll"
open System.Xml.Linq
person Ryan Sharif    schedule 07.09.2018