我们有一个F#项目和一个C#项目的解决方案。两者都使用相同的NuGet包,使用NuGet包还原来自动下载。令人沮丧的是,我们不断遇到F#项目无法构建的问题,迫使我们卸载然后重新安装所有软件包。看来NuGet在安装过程中没有正确编辑fsproj文件,因此给我们留下了重复的引用,或者是用于阻止构建的错误引用。有没有人遇到类似的问题/有没有人知道解决方案?
答案 0 :(得分:5)
你遇到这个错误吗? F# Project VS 2012: Update package removes HintPath
NuGet中还有一些其他已知错误会影响F#项目。您可能想浏览CodePlex上的NuGet问题跟踪器,看看您的问题是否已经报告过;如果它没有,你应该肯定提交错误报告,以使NuGet开发人员意识到这个问题。
答案 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>