Невозможно добавить ссылку с С# PCL на F # PCL (обновление VS 2015)
У меня возникают проблемы с созданием портативного проекта F #, который должен быть связан с переносным проектом С#. При добавлении такой ссылки появляется следующее сообщение:
Невозможно добавить ссылку на 'PortableLibrary1'. Проекты Portable Library могут ссылаться только на другие проекты и сборки Portable Library.
Проблема легко воспроизводится с использованием последней версии Visual Studio 2015 Update 1 (версия 14.0.24720.00). Я также установил Xamarin.
Я могу воспроизвести проблему, используя любой вид портативного проекта С# со следующими доступными:
- Библиотека классов (Portable)
- Библиотека классов (переносимая для iOS, Android и Windows)
и с любым проектом портативной библиотеки F # со следующими доступными:
- Портативная библиотека (.NET 4.5, Windows Store, Silverlight 5, Xamarin) [Профиль 47]
- Портативная библиотека (.NET 4.5, Windows Store, Windows Phone 8 Silverlight, Xamarin) [Профиль 78]
- Портативная библиотека (.NET 4.5, Windows Store, Windows Phone 8.1, Windows Phone Silverlight 8, Xamarin) [Профиль 259]
- Портативная библиотека (.NET 4.5, Windows Store, Xamarin) [Профиль 7]
Я использовал те же профили для С#, что и для F #, и ничего не помогает.
Похоже, что раньше была такая проблема (Как добавить ссылку на F # Portable Library из С# Portable Class Library (PCL)), которая затем была успешно исправлено. Но теперь он снова воспроизводится.
Может кто-нибудь, пожалуйста, скажите мне, что я чего-то не хватает? Может быть, есть что-то, что нужно дополнительно установить или так?
Ответы
Ответ 1
У меня была такая же проблема. Я решил это с взломом .csproj моего PCL. После этого F # PCL ссылается в проекте С#, и я могу использовать все. Я не знаю, есть ли проблемы - я не мог понять.
Вот шаги для воспроизведения:
- новый проект С# (класс переносимого класса 111)
- новый проект F # (переносимый профиль класса 7)
- загляните в файл F #.fsproj и скопируйте значение "Project/PropertyGroup/ProjectId"
-
отредактируйте С#.csproj и добавьте следующую группу элементов
<ItemGroup>
<ProjectReference Include="..\F# Project\F# Project.fsproj">
<Project>{F# Project Id}</Project>
<Name>F# Project</Name>
</ProjectReference>
</ItemGroup>
Я использую сообщество Visual Studio 2015 с обновлением 2
Ответ 2
Если на самом деле есть ошибка, и вы хотите называть что-то из библиотеки С# С# в F # PCL, то для работы может быть добавлена библиотека С# в качестве ссылки на библиотеку F # (другая way arround).
Затем код F # реализует интерфейс (см. https://msdn.microsoft.com/en-us/library/dd233207.aspx), который вы определяете на стороне С#.
Он также вызовет метод, который вы предоставляете на стороне С#, чтобы дать вам ссылку на экземпляр класса, который реализует интерфейс (который реализуется со стороны F #). В качестве альтернативы вы можете использовать MEF (Managed Extensibility Framework - https://blogs.msdn.microsoft.com/jomo_fisher/2010/03/09/neat-samples-extend-your-f-program-with-mef/), чтобы передать эту реализацию интерфейса со стороны F # на сторону С#, с С# сторона, инициирующая запрос на "привязку" (также читается об инверсии управления/зависимости впрыска)