2015-08-02 3 views
4

У нас есть проект с F # 3.1 с использованием Microsoft.FSharp.Data.TypeProviders. Теперь мы пытаемся построить этот проект с VS2015, и у нас есть проблемы с этой частью F #. Например, когда я пытаюсь установить его с помощью Nuget, это требует F # 3.1. Я использую this guide, и он выглядит устаревшим.Нужно уточнить, что касается Microsoft.FSharp.Data.TypeProviders

Так что я буду благодарен за ответы на мои вопросы:

  1. Какая часть F Microsoft.FSharp.Data.TypeProviders # язык принадлежит? Это основная библиотека F # или это одна из внешних библиотек? Кто несет ответственность за эту библиотеку? Где я могу найти отслеживатель ошибок для этой части экосистемы F #?

  2. Есть ли кто-нибудь, кто пытается использовать this tutorial для создания приложения F # в VS2015? У вас такие проблемы, как я? Или все работает нормально?

  3. Каково текущее состояние Microsoft.FSharp.TypeProviders? Является устаревшим, и все, что мне нужно, - это подождать некоторое время, когда библиотека будет принята в F # 4.0 и VS2015. Или мне нужно переключиться на другую библиотеку доступа к БД?

Вот полное описание для воспроизведения ошибки:

  • Новый проект - F # - консольного приложения (нетто 4,6)
  • NuGet - Установить Data.TypeProviders. packages.config:

    <?xml version="1.0" encoding="utf-8"?> 
        <packages> 
        <package id="FSharp.Core.3" version="0.0.2" targetFramework="net46" /> 
        <package id="FSharp.Data.TypeProviders" version="0.0.1" targetFramework="net46" /> 
        </packages> 
    
  • Чтобы program.fs добавить строки:

    module Test 
        open Microsoft.FSharp.Data.TypeProviders 
        type internal DB = SqlDataConnection<"Data Source=MyServer;Initial Catalog=MyDB;Integrated Security=SSPI;"> 
    

Вот сообщение об ошибке:

The .NET SDK 4.0 or 4.5 tools can not be found

enter image description here

+0

Что такое "Microsoft.FSharp.Data.TypeLibrary"? EDIT: Из ссылки, я думаю, вы имели в виду 'FSharp.Data.TypeProviders.dll'. Я не уверен, что ответ. –

+0

Да. Извините, это была моя ошибка - TypeProviders. Прежде всего, для этого требуется F # 3.0. Во-вторых, я не могу использовать Dbml из этой библиотеки в VS2015. Так что мне просто интересно, что рекомендуется для работы с MS SQL в F # 4.0? – demas

+0

Я видел некоторые сообщения об этой проблеме - похоже, что VS 2015 не создает какой-либо раздел реестра, который ожидает F #. Помимо этого, я думаю, что он все равно должен работать, хотя это то, что нужно исправить. –

ответ

10

Некоторые более исторический фон:

1.What part of F# language Microsoft.FSharp.Data.TypeProviders belongs to? It is F# core library or it is one of external libraries? Who is responsible for this library? Where can I find the bug tracker for this part of F# ecosystem?

Это не является частью так что вы можете быть счастливым и продуктивным F # dev, не взаимодействуя с ним. Он был создан корпорацией Майкрософт и поставляется с F # 3.0/VS 2012 в качестве набора поставщиков in-box для общих стеков данных Msft. В одном выпуске были добавлены поставщики типов как языковые функции, поэтому эта библиотека была немного демонстрацией того, что можно было сделать. FS.D.TP в настоящее время активно не поддерживается. Исходная версия 4.3.0.0 по-прежнему поставляется в комплекте с VS 2013 и VS 2015, но никаких изменений со времени выпуска VS 2012 не было. Источник доступен here, и вы также можете регистрировать ошибки в этом репо.

В принципе, библиотека берется как проект сообщества и поддерживается/обновляется оттуда в виде пакета nuget. Ничто не мешает этому. Однако наличие библиотеки в поле с подписью Msft и поддержкой очень важно для многих корпоративных клиентов. Таким образом, он сохраняется в таком состоянии неопределенности, где он находится в поле, но не обновляется.

3.What is the current state of Microsoft.FSharp.TypeProviders? Is it outdated and all what I need is to wait some time when the library will be adopted to F# 4.0 and VS2015. Or do I need to switch to other DB-access library?

Некоторые из этих вопросов выше. Библиотека должна быть полностью функциональной с F # 3.1 или F # 4.0, если у вас есть все необходимые зависимости. В частности, вам нужен установленный .NET 4.0 или 4.5 SDK (вы можете получить Win8/.NET 4.5 SDK here), потому что ТП полагаются на различные исполняемые инструменты-кодегины (sqlmetal.exe, svutil.exe), которые идут вместе с ним.

+5

Спасибо. Я могу подтвердить, что установка Win8/.NET 4.5 SDK устраняет проблему. – demas

+2

Установщик для Win8/.NET 4.5 SDK падает во время установки на моей машине Win10/.NET 4.6. Последний пакет Win10 SDK устанавливается, но это не помогает мне. –

+0

@JonHarrop У меня также была аналогичная проблема. Мой домашний ПК работал нормально, но это имеет смысл, так как он был обновлен с Windows 8.1 до Windows 10. Мой рабочий ПК я не мог заставить это работать вообще, новые окна 10 устанавливаются. Я получил его для работы, запустив настройку SDK и сообщив, чтобы она загружалась для другой машины. Я только загрузил SDK Windows и .net4.5 SDK (хотя я уверен, что неважно, загружаете ли вы все). Затем я просто решил установить эти 2 SDK и bam, все работает сейчас. – chongo2002

1

Я просто создал новый проект в VS 2015 нацеливание F # 4.0 (4.4.0.0) на .NET 4.6, добавлена ​​ссылка на FSharp.Data.TypeProviders используя NuGet, которые приводят к следующему packages.config:

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="FSharp.Core.3" version="0.0.2" targetFramework="net46" /> 
    <package id="FSharp.Data.TypeProviders" version="0.0.1" targetFramework="net46" /> 
</packages> 

Затем я добавил новый файл и вошел

module Test 
open Microsoft.FSharp.Data.TypeProviders 
type internal DB = SqlDataConnection<"Data Source=.;Initial Catalog=OBSCURED_CATALOG;Integrated Security=SSPI;"> 
let private e1 = DB.GetDataContext().OBSCURED_ENTITY 

Тогда VS сказал мне ссылку System.Data.Linq ... все работает так же, как это должно и учебник выглядит уточненный как хорошо.

Вы уже пытались создать новый проект вместо переноса старого?

TL; DR (см chat)

Проблема заключается в том, что некоторые ключи реестра отсутствовали.Если реестр не содержит

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.1A] 
"InstallationFolder"="C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.1A\\" 
"ProductVersion"="8.1.51641" 
"ProductName"="Microsoft .NET Framework 4.5.1 SDK" 

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools] 
"ProductVersion"="8.1.51641" 
"ComponentName"="Microsoft .NET Framework 4.5.1 SDK" 
"InstallationFolder"="C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.1A\\bin\\NETFX 4.5.1 Tools\\" 

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools-x64] 
"ProductVersion"="8.1.51641" 
"ComponentName"="Microsoft .NET Framework 4.5.1 SDK" 
"InstallationFolder"="C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.1A\\bin\\NETFX 4.5.1 Tools\\x64\\" 

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools-x86] 
"ProductVersion"="8.1.51641" 
"ComponentName"="Microsoft .NET Framework 4.5.1 SDK" 
"InstallationFolder"="C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.1A\\bin\\NETFX 4.5.1 Tools\\" 

это может быть время (пере) установить Windows SDK для Windows 8.

+0

Можете ли вы добавить в свой проект 'type dbml = DbmlFile <" MyDatabase.dbml ", ContextTypeName =" MyDataContext ">'? (Это отсюда https://msdn.microsoft.com/en-us/en-en/library/hh361039.aspx). Мы хотим сохранить строку подключения в файле конфигурации. Эта строка дает мне ошибку: 'TypeProviders: инструменты .NET SDK 4.0 или 4.5 не могут быть найдены даже в новом проекте. Я думаю, вам не нужно создавать dbml-файл, чтобы сделать эту проверку. Благодарю. – demas

+0

добавив, что это дает 'Поставщик типа '. Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders' сообщил об ошибке: Не удалось найти файл '... \ MyDatabase.dbml'. F ... \ F.fs', так что, по крайней мере, провайдер типа найден. Включены ли поставщики типов в Инструменты -> Параметры -> F # Инструменты -> Поставщики типов? – CaringDev

+0

Да, все провайдеры включены. Более того, у меня есть ошибка даже с вашим кодом. Я обновил свой вопрос и описал все шаги по воспроизведению ошибки. Можете ли вы поделиться своим проектом (github или что-то еще)? – demas

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