3

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

4

2 回答 2

5

你遇到这个错误了吗?F# Project VS 2012:更新包删除 HintPath

NuGet 中还有一些其他已知错误会影响 F# 项目。您可能需要浏览 CodePlex 上的 NuGet 问题跟踪器,以查看您的问题是否已被报告;如果没有,您绝对应该提交一个错误报告,让 NuGet 开发人员意识到这个问题。

NuGet 问题跟踪器

于 2013-03-08T21:43:35.390 回答
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.

它正确地创建一个包目录,下载 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>
于 2013-06-16T07:34:38.700 回答