Как добавить ссылку на 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 #. Он покажет предупреждение в проводнике решений, указывающее на то, что что-то еще не так, но, похоже, оно работает на практике.