F#プロジェクトとC#プロジェクトを使用したソリューションがあります。どちらも同じNuGetパッケージのセットを使用し、NuGetパッケージの復元を使用してダウンロードを自動化します。苛立たしいことに、F#プロジェクトをビルドできないという問題が常に発生しており、すべてのパッケージをアンインストールしてから再インストールする必要があります。NuGetがインストール中にfsprojファイルを適切に編集していないため、参照が重複しているか、参照が誤ってバージョン管理されてビルドがブロックされているようです。誰かが同様の問題に遭遇したことがあります/誰かが解決策を知っていますか?
2 に答える
このバグに遭遇していますか?F# Project VS 2012: 更新パッケージで HintPath が削除される
NuGet には、F# プロジェクトに影響する既知のバグが他にもいくつかあります。CodePlex の NuGet issue tracker を参照して、問題が既に報告されているかどうかを確認することをお勧めします。そうでない場合は、間違いなくバグ レポートを提出して、NuGet 開発者に問題を認識させる必要があります。
最近、この問題とその再現方法についてブログ投稿を書きました。
http://mikehadlow.blogspot.co.uk/2013/06/nuget-install-is-broken-with-f.html
リクエストに応じて、以下の冒頭にコピーしました。
NuGet を使用してパッケージ参照を F# プロジェクトに追加しようとすると、非常に厄介なバグが発生します。インストールされているアセンブリのバージョンが GAC にもある場合、または別のバージョンが出力ディレクトリに既に存在する場合に、この問題が発生します。
まず、アセンブリのバージョンが GAC に既に存在する場合に問題を再現しましょう。
F# プロジェクトで新しいソリューションを作成します。
マシンの GAC にも存在する NuGet からインストールするアセンブリを選択します。皮肉なことに、この例では 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>