我们有一个包含 F# 项目和 C# 项目的解决方案。两者都使用同一组 NuGet 包,使用 NuGet 包还原来自动下载。令人沮丧的是,我们经常遇到无法构建 F# 项目的问题,迫使我们卸载然后重新安装所有包。似乎 NuGet 在安装过程中没有正确编辑 fsproj 文件,因此给我们留下了重复的引用,或者阻止了构建的错误版本引用。有没有人遇到过类似的问题/有没有人知道解决方案?
2 回答
你遇到这个错误了吗?F# Project VS 2012:更新包删除 HintPath
NuGet 中还有一些其他已知错误会影响 F# 项目。您可能需要浏览 CodePlex 上的 NuGet 问题跟踪器,以查看您的问题是否已被报告;如果没有,您绝对应该提交一个错误报告,让 NuGet 开发人员意识到这个问题。
我最近写了一篇关于这个问题以及如何重现它的博客文章。
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>