我们有一个包含F#和C#项目的解决方案。两个项目都使用相同的NuGet包,使用NuGet包恢复自动下载。令人沮丧的是,我们经常遇到F#项目无法构建的问题,迫使我们卸载然后重新安装所有包。似乎在安装过程中NuGet没有正确地编辑fsproj文件,从而给我们留下重复的引用或者版本不匹配的引用,阻止了构建。是否有人遇到类似的问题/是否知道解决方案?
你是否遇到了这个bug?F#项目 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
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.
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文件时,我发现它错误地引用了NuGet.Core版本(1.6.30117.9648)从GAC中,并且没有指向已下载软件包的提示路径。
<Reference Include="NuGet.Core, Version=1.6.30117.9648, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<Private>True</Private>
</Reference>