Как добавить ссылку на F # Portable Library из С# Portable Class Library (PCL)

У меня есть проект, который содержит два проекта F # и проект С#, в котором я хотел бы написать некоторые тесты XUnit:

  • FS_PL: F # 3.1 (3.3.1.0) Portable Library
  • FS_PL_Legacy: F # 31. (2.3.5.1) Portable Library (Legacy)
  • Тесты: С#.NET 4.5/Win8 С# Portable Class Library (PCL)

Я не могу добавить ссылку из тестов в любую из библиотек F #.

Когда я пытаюсь добавить ссылку на FS_PL, мне предоставляется диалоговое окно, в котором говорится: "Невозможно добавить ссылку на проект" FS_PL ". Цели проекта" FS_PL "Portable Library не совпадают или совместимы с цели текущего проекта Portable Library": enter image description here

Это нечетно, поскольку и мои тесты, и библиотеки FS_PL настроены для установки на .NET 4.5 и Windows 8.

Итак, я создал FS_PL_Legacy и попытался добавить ссылку на него. Это дает мне очень "полезное" сообщение с сообщением "Невозможно добавить ссылку на проект" FS_PL_Legacy ": enter image description here

Кто-нибудь знает, что я делаю неправильно?

Частичное обходное решение # 1

Использование обходного пути miegirl от проблема подключения, обсуждающая эту проблему, я добавил в проект С# следующее:

<ItemGroup>
    <!-- Manually added reference to F# projects to overcome issue discussed here:
            http://stackoverflow.com/info/23111782/how-do-i-add-a-reference-to-f-portable-library-from-c-sharp-portable-class-libr
        -->
    <ProjectReference Include="..\FS_PL\FS_PL.fsproj">
        <Project>{2c4b1776-3d34-4534-8520-8a1e6daa0e6e}</Project>
        <Name>FS_PL</Name>
    </ProjectReference>
    <ProjectReference Include="..\FS_PL_Legacy\FS_PL_Legacy.fsproj">
        <Project>{0d7b657c-906b-4448-ae64-2153a1fa910c}</Project>
        <Name>FS_PL_Legacy</Name>
    </ProjectReference>
</ItemGroup>

Это, по крайней мере, позволяет VS ссылаться на проекты F #, но эти проекты отмечены несколькими предупреждениями, а переносная библиотека С# не может построить, поскольку не может ссылаться на типы в одной или обеих библиотеках F #: (

Большинство предупреждений в окне вывода сборки указывают, что на библиотеки F # нельзя ссылаться, поскольку они, как представляется, имеют "косвенную зависимость от сборки фреймов" [System.Threading/System.Lync/etc.] ", которая не может быть разрешенными в рамках текущей целевой структуры"

Ответы

Ответ 1

Спросите, и вы будете услышаны...

I поднял эту проблему в Twitter с доном Симе и некоторыми из команды F #. Они подтвердили, что это проблема, с которой они столкнулись с проблемой исправления, которая пробивалась через процесс выпуска.

Я установил сегодня сборку Visual F # daily, и я могу подтвердить, что эта проблема решена!

Спасибо Don и команде F # за исправление этой проблемы - теперь я могу включить новый код F # в свой основной код С# и набор тестов... и начать заменять куски нашей системы кодом FAR меньше F #, чем эквивалентный С#; )

Ответ 2

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

У меня было приложение Xamarin Forms Xaml, и я хотел добавить F # PCL для выполнения некоторых вычислений. Я видел предупреждающее сообщение при попытке ссылаться на F # PCL в моем С# PCL:

Невозможно добавить ссылку на 'PortableLibrary1'. Проекты Portable Library могут ссылаться только на другие проекты и сборки Portable Library.

Я попытался напрямую отредактировать файл csproj и даже попытался перейти на VS 2017 RC, но ничего не работало.

Исправление - это немного взлома.

  • Сначала создайте все (включая проект Portable F #)
  • Добавьте ссылку F # на проект С#, перейдя на выходную DLL. Прямой клик по проекту CS, Add → Reference... → Browse → Нажмите кнопку "Обзор..." и выберите DLL проекта F # (мой был в папке отладки), затем нажмите "ОК".
  • F # PCL теперь отображается в списке ссылок в проводнике решений.
  • Добавьте ссылку на проект F # в проект С# снова, но выбрав проект, т.е. щелкните правой кнопкой мыши по проекту CS, Add → Reference... → Projects → Просмотрите проект PortableLibrary и нажмите OK.
  • Это не дает мне окно с сообщением об ошибке, связанное с добавлением ссылки, и я могу получить всю свою добротность F # в моем проекте С#.

Ответ 3

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