Невозможно добавить ссылку с С# 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 # на сторону С#, с С# сторона, инициирующая запрос на "привязку" (также читается об инверсии управления/зависимости впрыска)