私は昨日働いていたASP.NET MVC5アプリケーションを持っています、そして今私が構築しようとするとき私はこのエラーを得ています:
このプロジェクトは、このコンピュータに存在しないNuGetパッケージを参照しています。
不足しているパッケージを自動的にダウンロードおよびインストールできるようにする2つのオプションをオンにしました。 packagesフォルダにあるファイルをすべて削除してから再ダウンロードしてみました。また、私がnugetを開いてアップデートを探すときには、インストールする必要があるものは何もないと言っています。この驚くほど厄介な問題を乗り越えるために他に何をするべきか私にはわかりません。
私の場合は、.csprojファイルから以下を削除する必要がありました。
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.Microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>
実際、このスニペットでは、エラーメッセージがどこから来ているのかがわかります。
MSBuild統合パッケージ復元 から 自動パッケージ復元 ( http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-)復元 )
1つの解決策は、.csprojファイルから次のものを削除することです。
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.Microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>
どうやって?
私の場合は、ソリューションフォルダをある場所から別の場所に移動し、少し整理し直したところ、その相対的なフォルダ構造が変更されたためです。
だから私はから私の.csproj
ファイル内の次のようなすべてのエントリを編集する必要がありました
<Import Project="..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
に
<Import Project="packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
(..\packages\
からpackages\
への変更に注意してください。あなたの場合は相対的な構造が違うかもしれませんが、あなたは考えを持っています。)
私は私の解決策を右クリックしてから NuGetパッケージの復元を有効にする オプションをクリックすることでこの問題を簡単に解決します。
(P.S:[ツールから拡張インストール] - > [拡張機能と更新] - > [Visual Studio 2013用のNugetパッケージマネージャ]があることを確認してください。インストールされていない場合は、この拡張子を先にインストールしてください)
それが役に立てば幸い。
私の場合、それはMicrosoft.Build.Bclバージョンと関係がありました。私のnugetパッケージのバージョンは1.0.21でしたが、私のプロジェクトファイルはまだバージョン1.0.14を指していました
だから私はから私の.csprojファイルを変更しました:
<Import Project="..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
<Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
<Error Condition="!Exists('..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.Microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
<Error Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.Microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
</Target>
に:
<Import Project="..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
<Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
<Error Condition="!Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.Microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
<Error Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.Microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
そして、ビルドは再び機能していました。
TFSを使用している場合
ソリューションのNuGet.exe
フォルダーからNuGet.targets
および.nuget
ファイルを削除します。ファイル自体もソリューションワークスペースから削除されていることを確認してください。ソース管理にパッケージを追加することを迂回し続けるためにNuGet.Config
ファイルを保持します。
ソリューション内の各プロジェクトファイル(例:.csproj、.vbproj)を編集し、NuGet.targets
ファイルへの参照をすべて削除します。選択したエディタでプロジェクトファイルを開き、以下の設定を削除します。
<RestorePackages>true</RestorePackages>
...
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
...
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.Microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>
TFSを使用していない場合
ソリューションから.nuget
フォルダを削除します。フォルダー自体もソリューションワークスペースから削除されていることを確認してください。
ソリューション内の各プロジェクトファイル(例:.csproj、.vbproj)を編集し、NuGet.targets
ファイルへの参照をすべて削除します。選択したエディタでプロジェクトファイルを開き、以下の設定を削除します。
<RestorePackages>true</RestorePackages>
...
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
...
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.Microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>
パッケージが間違ったフォルダに復元された可能性はありますか? csprojファイル内のパスが正しいことを確認してください。
それらが異なる場合は、パッケージが別の場所に復元されていることが原因である可能性があります。これは、NuGet.Configファイルが次のようにノードを指定してチェックインされていることが原因と考えられます。
<add key="repositoryPath" value="..\..\Packages" />
プロジェクトはまだ古い場所を見ているので、パッケージは復元されています。
私は同じ問題を抱えていました。私の場合は Microsoft.Bcl.Build パッケージをインストールすることで問題は解決しました。
これらは私が問題を解決するのに使用したステップです:
ソリューションにnugetパッケージを追加するには:
私にとっては、作業中のソリューションから既存のものに.nugetフォルダーをコピーして、その内容を参照しただけの作業でした。
.csprojファイルの下の行を削除
<Import Project="$(SolutionDir)\.nuget\NuGet.targets"
Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer.
Enable NuGet Package Restore to download them. For more information, see
http://go.Microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')"
Text="$([System.String]::Format('$(ErrorText)',
'$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>
.slnと.csprojを編集することは、必ずしもそれほど簡単ではなく、また望ましいことでもありません。エラーリストを取得したら、どのプロジェクトに不足しているパッケージがあるかを確認できます(また、パッケージがソースコード、リソース、イメージ、または単なるテキストベースのものでない限り、参照ノードには不足しているアセンブリがあることを示します)。
最新バージョンのパッケージを使用しない限り、パッケージを削除してから追加することはお勧めできません。そうでなければ、いつも楽しいものではなく、驚きに備えてください。
たとえば、パッケージがEntityFrameworkの場合、NuGet galleryから最新のバージョンが得られます。このコメントの執筆時点では 6.1.3 です。
そのため、この状況に対処するための最も安全な方法は、見つからないパッケージを1つずつ復元することです。はい、少々痛みを伴う運動ですが、パッケージのバージョンが異なるために微妙なバグを追いかけるのはもっと不快かもしれません。
これを言って、再度EntityFrameworkを欠けているパッケージとすると、Package-Managerコンソールで次のコマンドを発行できます。
PM> Install-Package EntityFramework -Version 6.0.1
これで正しいバージョン、つまり 6.0.1 がインストールされます。これはpackages.configで指定されているものです。
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="6.0.1" targetFramework="net451" />
</packages>
私は私のMVC Webアプリケーションにクラスライブラリを参照するとき、私は同じ問題を抱えていました、
問題は、2つのプロジェクト間でパッケージのバージョン番号が一致しないことでした。
例:私のクラスライブラリは1.2.3のlog4netを持っていたが私のウェブアプリケーションは1.2.6を持っていた
修正:両方のプロジェクトが同じバージョン番号を参照していることを確認してください。
1つの解決策は、.csprojファイルから次のものを削除することです。
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
このプロジェクトは、このコンピュータに存在しないNuGetパッケージを参照しています。ダウンロードするには、NuGet Package Restoreを有効にします。詳細については、 http://go.Microsoft.com/fwlink/?LinkID = 322105 を参照してください。存在しないファイルは{0}です。