如何从C#可移植类库(PCL)添加对F#可移植库的引用

时间:2014-04-16 14:04:23

标签: c# f# visual-studio-2013 portable-class-library

我有一个项目,其中包含两个F#项目和一个C#项目,我想在其中编写一些XUnit测试:

  • FS_PL:F#3.1(3.3.1.0)便携式库
  • FS_PL_Legacy:F#31。(2.3.5.1)便携式图书馆(遗产)
  • 测试:C#.NET 4.5 / Win8 C#可移植类库(PCL)

我无法将测试中的引用添加到任何一个F#库中。

当我尝试添加对FS_PL的引用时,会出现一个对话框,指出"无法添加对项目的引用' FS_PL'。便携式图书馆项目的目标' FS_PL'与当前的便携式图书馆项目的目标不同或兼容": enter image description here

这很奇怪,因为我的测试和FS_PL库都配置为针对.NET 4.5& Windows 8。

所以我创建了FS_PL_Legacy并尝试添加对它的引用。这样做会给我一条非常' 的消息,说明"无法添加对项目的引用' FS_PL_Legacy'": enter image description here

有谁知道我做错了什么?

部分解决方法#1

使用来自a Connect issue discussing this problem的miegirl解决方法,我在C#项目中添加了以下内容:

<ItemGroup>
    <!-- Manually added reference to F# projects to overcome issue discussed here:
            http://stackoverflow.com/questions/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#项目,但是这些项目被标记了几个警告,并且C#可移植库无法构建,因为它无法引用一个或两个F#库中的类型:(

构建输出窗口中的大多数警告表明无法引用F#库,因为它们似乎具有对框架程序集的间接依赖关系&#34; [System.Threading / System.Lync / etc ]&#34;无法在当前目标框架中解决的问题&#34;

3 个答案:

答案 0 :(得分:6)

  

问,你们会被听到......

I raised this issue on Twitter与Don Syme和一些F#团队合作。他们确认这是一个问题,他们有一个解决方案正在通过发布过程。

我安装了today's Visual F# daily build,我可以确认此问题已经解决了!

感谢Don和F#团队解决这个问题 - 我现在可以将新的F#代码整合到我的主要C#代码库和&amp;测试套件...并开始使用FAR少于F#代码替换我们系统的块而不是等效的C#;)

答案 1 :(得分:2)

这个bug很旧,但仍然会发生。我在运行VS 2015社区时遇到了这个问题。我意识到这个问题是关于VS 2013的,但我不确定在哪里发布我的答案。

我有一个Xamarin Forms Xaml应用程序,我想添加一个F#PCL进行一些计算。我在C#PCL中尝试引用F#PCL时看到了警告信息:

  

无法添加对&#39; PortableLibrary1&#39;的引用。可移植库项目只能引用其他可移植库项目和程序集。

我尝试直接编辑csproj文件,甚至尝试升级到VS 2017 RC,但没有任何工作。

修复程序有点像黑客攻击。

  1. 首先构建所有内容(包括Portable F#项目)
  2. 通过浏览到输出DLL,将F#引用添加到C#项目。即右键单击CS项目,添加 - &gt;参考... - &gt;浏览 - &gt;点击&#34;浏览...&#34;按钮并选择F#项目DLL(我的调试文件夹中有我的),然后单击“确定”。
  3. F#PCL现在显示在解决方案资源管理器的参考列表中。
  4. 将F#项目引用添加到C#项目再次但是通过选择项目,即右键单击CS项目,添加 - &gt;参考... - &gt;项目 - &gt;检查PortableLibrary项目,然后单击“确定”。
  5. 这给我没有关于添加引用的错误消息框,我可以在我的C#项目中获得我所有的F#优点。

答案 2 :(得分:1)

我不知道根本原因,但您可以手动编辑.csproj文件以添加对F#项目的引用。它将在解决方案资源管理器中显示一个警告,表明某些内容仍然存在问题,但它似乎在实践中有效。