[visual-studio-2010] 이 프로젝트는이 컴퓨터에없는 NuGet 패키지를 참조합니다

어제 작동하는 ASP.NET MVC5 응용 프로그램이 있는데 이제 빌드하려고 할 때이 오류가 발생합니다.

이 프로젝트는이 컴퓨터에없는 NuGet 패키지를 참조합니다.

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>

실제로이 스 니펫에서 오류 메시지의 출처를 확인할 수 있습니다.

MSBuild 통합 패키지 복원 에서 자동 패키지 복원 으로 변환하고있었습니다 ( http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore )


답변

한 가지 해결책은 .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. 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오. 프로젝트를 다시로드하십시오.

답변

필자의 경우 솔루션 폴더를 한 위치에서 다른 위치로 옮긴 후 조금 재구성하고 프로세스에서 상대 폴더 구조가 변경 된 후에 발생했습니다.

그래서 내 .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 패키지 복원 사용 을 클릭하여이 문제를 쉽게 해결할 수 있습니다. 옵션 있습니다.

(PS : 도구-> 확장 및 업데이트-> Nuget 패키지 관리자에서 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.exeNuGet.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 통합 솔루션 마이그레이션


답변

패키지가 잘못된 폴더로 복원되었을 수 있습니까? csproj 파일의 경로가 올바른지 확인하십시오.

패키지가 다르면 패키지가 다른 위치로 복원되어 발생할 수 있습니다. 다음과 같은 노드 지정에서 NuGet.Config 파일을 확인하면 발생할 수 있습니다.

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

프로젝트가 여전히 이전 위치를보고 있으므로 패키지가 복원되고 있습니다.