NuGet /包恢复不能很好地与F#一起玩

时间:2013-03-08 21:28:57

标签: f# nuget

我们有一个F#项目和一个C#项目的解决方案。两者都使用相同的NuGet包,使用NuGet包还原来自动下载。令人沮丧的是,我们不断遇到F#项目无法构建的问题,迫使我们卸载然后重新安装所有软件包。看来NuGet在安装过程中没有正确编辑fsproj文件,因此给我们留下了重复的引用,或者是用于阻止构建的错误引用。有没有人遇到类似的问题/有没有人知道解决方案?

2 个答案:

答案 0 :(得分:5)

你遇到这个错误吗? F# Project VS 2012: Update package removes HintPath

NuGet中还有一些其他已知错误会影响F#项目。您可能想浏览CodePlex上的NuGet问题跟踪器,看看您的问题是否已经报告过;如果它没有,你应该肯定提交错误报告,以使NuGet开发人员意识到这个问题。

NuGet Issue Tracker

答案 1 :(得分:0)

我最近写了一篇关于这个问题以及如何重现它的博客文章。

http://mikehadlow.blogspot.co.uk/2013/06/nuget-install-is-broken-with-f.html

我已根据要求在下面开头复制:

当您尝试使用NuGet向F#项目添加包引用时,有一个非常讨厌的错误。当正在安装的程序集在GAC中具有版本或输出目录中已存在不同版本时,它会自行显示。

首先让我们在GAC中已经存在一个版本的程序集时重现该问题。

使用F#项目创建新解决方案。

选择要从NuGet安装的程序集,该程序集也存在于计算机上的GAC中。出于讽刺的目的,我将为这个例子选择NuGet.Core。

这是我的GAC:

D:\>gacutil -l | find "NuGet.Core"
NuGet.Core, Version=1.0.11220.104, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
NuGet.Core, Version=1.6.30117.9648, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL

您可以看到GAC中的最高版本是版本1.6.30117.9648

现在让我们从官方NuGet源安装NuGet.Core版本2.5.0:

PM> Install-Package NuGet.Core -Version 2.5.0
Installing 'Nuget.Core 2.5.0'.
Successfully installed 'Nuget.Core 2.5.0'.
Adding 'Nuget.Core 2.5.0' to Mike.NuGetExperiments.FsProject.
Successfully added 'Nuget.Core 2.5.0' to Mike.NuGetExperiments.FsProject.

它正确创建一个packages目录,下载NuGet.Core包并创建一个packages.config文件:

D:\Source\Mike.NuGetExperiments\src>tree /F
D:.
│   Mike.NuGetExperiments.sln
│
├───Mike.NuGetExperiments.FsProject
│   │   Mike.NuGetExperiments.FsProject.fsproj
│   │   packages.config
│   │   Spike.fs
│   │
│   ├───bin
│   │   └───Debug
│   │
│   └───obj
│       └───Debug
│
└───packages
    │   repositories.config
    │
    └───Nuget.Core.2.5.0
        │   Nuget.Core.2.5.0.nupkg
        │   Nuget.Core.2.5.0.nuspec
        │
        └───lib
            └───net40-Client
                    NuGet.Core.dll

但是当我查看我的fsproj文件时,我发现它错误地从GAC引用了NuGet.Core版本(1.6.30117.9648),并且没有提示路径指向下载的包。

<Reference Include="NuGet.Core, Version=1.6.30117.9648, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
  <Private>True</Private>
</Reference>