어제 작동하는 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>
어떻게?
- 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오. 프로젝트를 언로드하십시오.
- 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오. csproj를 편집하십시오.
- 파일에서 부품을 제거하십시오. 저장.
- 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오. 프로젝트를 다시로드하십시오.
답변
필자의 경우 솔루션 폴더를 한 위치에서 다른 위치로 옮긴 후 조금 재구성하고 프로세스에서 상대 폴더 구조가 변경 된 후에 발생했습니다.
그래서 내 .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.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" />
프로젝트가 여전히 이전 위치를보고 있으므로 패키지가 복원되고 있습니다.