web-dev-qa-db-ja.com

このプロジェクトは、このコンピュータに存在しないNuGetパッケージを参照しています

私は昨日働いていたASP.NET MVC5アプリケーションを持っています、そして今私が構築しようとするとき私はこのエラーを得ています:

このプロジェクトは、このコンピュータに存在しないNuGetパッケージを参照しています。

不足しているパッケージを自動的にダウンロードおよびインストールできるようにする2つのオプションをオンにしました。 packagesフォルダにあるファイルをすべて削除してから再ダウンロードしてみました。また、私がnugetを開いてアップデートを探すときには、インストールする必要があるものは何もないと言っています。この驚くほど厄介な問題を乗り越えるために他に何をするべきか私にはわかりません。

266
Austin Harris

私の場合は、.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-)復元

406
Loren Paulsen

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>

どうやって?

  1. プロジェクトを右クリックしてください。プロジェクトをアンロードします。
  2. プロジェクトを右クリックしてください。 csprojを編集します。
  3. ファイルからその部分を削除します。保存する。
  4. プロジェクトを右クリックしてください。プロジェクトをリロードします。
67
Ivan Santiago

私の場合は、ソリューションフォルダをある場所から別の場所に移動し、少し整理し直したところ、その相対的なフォルダ構造が変更されたためです。

だから私はから私の.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\への変更に注意してください。あなたの場合は相対的な構造が違うかもしれませんが、あなたは考えを持っています。)

41
Nikita G.

私は私の解決策を右クリックしてから NuGetパッケージの復元を有効にする オプションをクリックすることでこの問題を簡単に解決します。

(P.S:[ツールから拡張インストール] - > [拡張機能と更新] - > [Visual Studio 2013用のNugetパッケージマネージャ]があることを確認してください。インストールされていない場合は、この拡張子を先にインストールしてください)

それが役に立てば幸い。

21
M.A

私の場合、それは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" />

そして、ビルドは再び機能していました。

17
henkie14

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>

参照: 自動パッケージ復元を使用するためのMSBuild統合ソリューションの移行

9
RAM

パッケージが間違ったフォルダに復元された可能性はありますか? csprojファイル内のパスが正しいことを確認してください。

それらが異なる場合は、パッケージが別の場所に復元されていることが原因である可能性があります。これは、NuGet.Configファイルが次のようにノードを指定してチェックインされていることが原因と考えられます。

<add key="repositoryPath" value="..\..\Packages" />

プロジェクトはまだ古い場所を見ているので、パッケージは復元されています。

6
psych

私は同じ問題を抱えていました。私の場合は Microsoft.Bcl.Build パッケージをインストールすることで問題は解決しました。

6
mheyman

これらは私が問題を解決するのに使用したステップです:

ソリューションにnugetパッケージを追加するには:

  1. Nugetパッケージを参照したいプロジェクト(ソリューションではない)を右クリックします。
  2. 選択してください。
  3. ポップアップウィンドウの左側には3つの選択肢があります。 Online> Microsoft&.NET を選択した場合は、Microsoft ASP.NET Web API 2.2パッケージグルーパー(または必要なパッケージはすべて)をインストールできます。
  4. (プロジェクトではなく)ソリューションを右クリックして nuget package restoreを有効にする を選択します。これにより、コンパイル時にパッケージが自動的にダウンロードされます。
1
user4569838

私にとっては、作業中のソリューションから既存のものに.nugetフォルダーをコピーして、その内容を参照しただけの作業でした。

1
meJustAndrew

.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>
0

.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>
0

私は私のMVC Webアプリケーションにクラスライブラリを参照するとき、私は同じ問題を抱えていました、

問題は、2つのプロジェクト間でパッケージのバージョン番号が一致しないことでした。

例:私のクラスライブラリは1.2.3のlog4netを持っていたが私のウェブアプリケーションは1.2.6を持っていた

修正:両方のプロジェクトが同じバージョン番号を参照していることを確認してください。

0
Srini

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}です。

0
Umar Khaliq