Этот проект ссылается на пакет NuGet, отсутствующие на этом компьютере

У меня есть приложение ASP.NET MVC5, которое работало вчера, и теперь я получаю эту ошибку, когда пытаюсь построить:

Этот проект ссылается на пакеты NuGet, отсутствующие на этом компьютере.

У меня есть две проверенные опции, которые позволяют nuget автоматически загружать и устанавливать отсутствующие пакеты, проверенные/включенные. Я также попытался удалить все файлы в папке пакетов, а затем перезагрузить их повторно. Кроме того, когда я открываю nuget и ищу обновления, он говорит, что нет необходимости в установке. Я не могу понять, что еще нужно сделать, чтобы выйти за пределы этой удивительно раздражающей проблемы.

Ответ 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>

Фактически, в этом фрагменте вы можете увидеть, откуда приходит сообщение об ошибке.

Я преобразовывал из восстановления встроенного пакета MSBuild в Автоматическое восстановление пакетов (http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore)

Ответ 2

Одним из решений было бы удалить из файла .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.
  • Удалить часть из файла. Сохранить.
  • Щелкните правой кнопкой мыши по проекту. Обновить проект.

Ответ 3

В моем случае это произошло после того, как я переместил папку с решением из одного места в другое, немного изменил ее структуру и в процессе изменилась ее относительная структура папок.

Поэтому мне пришлось редактировать все записи, похожие на следующие в моем .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\. Это может быть другая относительная структура в вашем случае, но вы получаете идею.)

Ответ 4

Я легко решаю эту проблему, щелкнув правой кнопкой мыши на своем решении, а затем щелкнув опцию Включить восстановление NuGet

(P.S: Убедитесь, что у вас есть Nuget Install From Tools → Extensions and Update → Nuget Package Manager для Visual Studio 2013. Если вы не установите это расширение сначала)

Надеюсь, что это поможет.

Ответ 5

В моем случае это связано с версией 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" />

И сборка снова работала.

Ответ 6

Если вы используете 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-Integrated для использования автоматического восстановления пакетов

Ответ 7

У меня была такая же проблема. В моем случае исправлена ​​проблема установки пакета Microsoft.Bcl.Build.

Ответ 8

Возможно ли, что пакеты были восстановлены в неправильную папку? Проверьте правильность путей в файлах csproj.

Если они различны, это может быть вызвано восстановлением пакетов в другое место. Это может быть вызвано проверкой файла NuGet.Config при указании node следующим образом:

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

Пакеты восстанавливаются, по проектам все еще смотрят на старое местоположение.

Ответ 9

Это шаги, которые я использовал для устранения проблемы:

Чтобы добавить пакеты nuget к вашему решению:

  • Щелкните правой кнопкой мыши на проекте (а не на решении), на котором вы хотите ссылаться на nuget пакеты.
  • Выберите: Управление пакетами nuget
  • В всплывающем окне слева есть три варианта. Если вы выберете "Интернет" > "Microsoft" и ".NET", вы сможете установить Групповой пакет Microsoft ASP.NET Web API 2.2 (или любой другой пакет вам нужно - мое было это).
  • Теперь щелкните правой кнопкой мыши по вашему решению (а не проекту) и выберите Включить восстановление пакета nuget. Это приведет к автоматическому загрузке пакетов при компиляции.

Ответ 10

У меня была такая же проблема, когда я ссылался на библиотеку классов в мое веб-приложение MVC,

проблема заключалась в несоответствии номера версии пакета nuget между двумя проектами.

ex: у моей библиотеки классов был log4net из 1.2.3, но у моего webapp было 1.2.6

Исправить: просто убедитесь, что оба проекта имеют одинаковый номер версии.

Ответ 11

Я абсолютно не знаю, что вызвало эту ошибку. Простое закрытие и повторное открытие визуальных студий остановили эту ошибку сборки.

Ответ 12

Редактирование .sln и .csproj не всегда так просто или желательно. Как только вы получите список ошибок, вы увидите, какие проекты имеют недостающие пакеты (также, ссылки node обычно указывают на отсутствие сборок, если только пакеты не являются исходным кодом, ресурсами, изображениями или просто текстовыми).

Удаление и добавление пакетов не является хорошей идеей, если вы не используете последнюю версию пакета. В противном случае будьте готовы к неожиданностям, а не всегда приятным.

Если, скажем, пакет EntityFramework, то из галереи NuGet вы получите последнюю версию, которая на момент написания этого комментария 6.1.3.

Итак, возможно, самый безопасный способ справиться с ситуацией - это восстановить недостающие пакеты по одному. Да, немного болезненное упражнение, но преследование тонких ошибок из-за разной версии пакета, возможно, гораздо более неприятно.

Сказав это, и пусть снова 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>

Ответ 13

Для меня это сработало, когда я только что скопировал папку .nuget из рабочего решения в существующую и нарекла его контентом!

Ответ 14

Это может произойти, если вы попытаетесь удалить postharp из вашего проекта.

Убедитесь, что вы удаляете строки Loren.

Ответ 15

Я создал папку с именем .nuget в корневой папке решения Затем добавлен файл "NuGet.Config" в этой папке со следующим содержимым

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<solution>
 <add key="disableSourceControlIntegration" value="true" />
</solution>
</configuration>

Затем созданный файл '.nuGet.targets', как показано ниже          $ (MSBuildProjectDirectory)..\

    <!-- Enable the restore command to run before builds -->
    <RestorePackages Condition="  '$(RestorePackages)' == '' ">false</RestorePackages>

    <!-- Property that enables building a package from a project -->
    <BuildPackage Condition=" '$(BuildPackage)' == '' ">false</BuildPackage>

    <!-- Determines if package restore consent is required to restore packages -->
    <RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'false' ">true</RequireRestoreConsent>

    <!-- Download NuGet.exe if it does not already exist -->
    <DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">false</DownloadNuGetExe>
</PropertyGroup>

<ItemGroup Condition=" '$(PackageSources)' == '' ">
    <!-- Package sources used to restore packages. By default will used the registered sources under %APPDATA%\NuGet\NuGet.Config -->
    <!--
        <PackageSource Include="https://nuget.org/api/v2/" />
        <PackageSource Include="https://my-nuget-source/nuget/" />
    -->
</ItemGroup>

<PropertyGroup Condition=" '$(OS)' == 'Windows_NT'">
    <!-- Windows specific commands -->
    <NuGetToolsPath>$([System.IO.Path]::Combine($(SolutionDir), ".nuget"))</NuGetToolsPath>
    <PackagesConfig>$([System.IO.Path]::Combine($(ProjectDir), "packages.config"))</PackagesConfig>
    <PackagesDir>$([System.IO.Path]::Combine($(SolutionDir), "packages"))</PackagesDir>
</PropertyGroup>

<PropertyGroup Condition=" '$(OS)' != 'Windows_NT'">
    <!-- We need to launch nuget.exe with the mono command if we're not on windows -->
    <NuGetToolsPath>$(SolutionDir).nuget</NuGetToolsPath>
    <PackagesConfig>packages.config</PackagesConfig>
    <PackagesDir>$(SolutionDir)packages</PackagesDir>
</PropertyGroup>

<PropertyGroup>
    <!-- NuGet command -->
    <NuGetExePath Condition=" '$(NuGetExePath)' == '' ">$(NuGetToolsPath)\nuget.exe</NuGetExePath>
    <PackageSources Condition=" $(PackageSources) == '' ">@(PackageSource)</PackageSources>

    <NuGetCommand Condition=" '$(OS)' == 'Windows_NT'">"$(NuGetExePath)"</NuGetCommand>
    <NuGetCommand Condition=" '$(OS)' != 'Windows_NT' ">mono --runtime=v4.0.30319 $(NuGetExePath)</NuGetCommand>

    <PackageOutputDir Condition="$(PackageOutputDir) == ''">$(TargetDir.Trim('\\'))</PackageOutputDir>

    <RequireConsentSwitch Condition=" $(RequireRestoreConsent) == 'true' ">-RequireConsent</RequireConsentSwitch>
    <!-- Commands -->
    <RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)"  $(RequireConsentSwitch) -o "$(PackagesDir)"</RestoreCommand>
    <BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -p Configuration=$(Configuration) -o "$(PackageOutputDir)" -symbols</BuildCommand>

    <!-- Make the build depend on restore packages -->
    <BuildDependsOn Condition="$(RestorePackages) == 'true'">
        RestorePackages;
        $(BuildDependsOn);
    </BuildDependsOn>

    <!-- Make the build depend on restore packages -->
    <BuildDependsOn Condition="$(BuildPackage) == 'true'">
        $(BuildDependsOn);
        BuildPackage;
    </BuildDependsOn>
</PropertyGroup>

<Target Name="CheckPrerequisites">
    <!-- Raise an error if we're unable to locate nuget.exe  -->
    <Error Condition="'$(DownloadNuGetExe)' != 'true' AND !Exists('$(NuGetExePath)')" Text="Unable to locate '$(NuGetExePath)'" />
    <SetEnvironmentVariable EnvKey="VisualStudioVersion" EnvValue="$(VisualStudioVersion)" Condition=" '$(VisualStudioVersion)' != '' AND '$(OS)' == 'Windows_NT' " />
    <DownloadNuGet OutputFilename="$(NuGetExePath)" Condition=" '$(DownloadNuGetExe)' == 'true' AND !Exists('$(NuGetExePath)')"  />
</Target>

<Target Name="RestorePackages" DependsOnTargets="CheckPrerequisites">
    <Exec Command="$(RestoreCommand)"
          Condition="'$(OS)' != 'Windows_NT' And Exists('$(PackagesConfig)')" />

    <Exec Command="$(RestoreCommand)"
          LogStandardErrorAsError="true"
          Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)')" />
</Target>

<Target Name="BuildPackage" DependsOnTargets="CheckPrerequisites">
    <Exec Command="$(BuildCommand)" 
          Condition=" '$(OS)' != 'Windows_NT' " />

    <Exec Command="$(BuildCommand)"
          LogStandardErrorAsError="true"
          Condition=" '$(OS)' == 'Windows_NT' " />
</Target>

<UsingTask TaskName="DownloadNuGet" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
    <ParameterGroup>
        <OutputFilename ParameterType="System.String" Required="true" />
    </ParameterGroup>
    <Task>
        <Reference Include="System.Core" />
        <Using Namespace="System" />
        <Using Namespace="System.IO" />
        <Using Namespace="System.Net" />
        <Using Namespace="Microsoft.Build.Framework" />
        <Using Namespace="Microsoft.Build.Utilities" />
        <Code Type="Fragment" Language="cs">
            <![CDATA[
            try {
                OutputFilename = Path.GetFullPath(OutputFilename);

                Log.LogMessage("Downloading latest version of NuGet.exe...");
                WebClient webClient = new WebClient();
                webClient.DownloadFile("https://nuget.org/nuget.exe", OutputFilename);

                return true;
            }
            catch (Exception ex) {
                Log.LogErrorFromException(ex);
                return false;
            }
        ]]>
        </Code>
    </Task>
</UsingTask>

 <UsingTask TaskName="SetEnvironmentVariable" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
    <ParameterGroup>
        <EnvKey ParameterType="System.String" Required="true" />
        <EnvValue ParameterType="System.String" Required="true" />
    </ParameterGroup>
    <Task>
        <Using Namespace="System" />
        <Code Type="Fragment" Language="cs">
            <![CDATA[
            try {
                Environment.SetEnvironmentVariable(EnvKey, EnvValue, System.EnvironmentVariableTarget.Process);
            }
            catch  {
            }
        ]]>
        </Code>
    </Task>
</UsingTask>