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


313

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

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

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


1
Я также включил восстановление nuget, щелкнув правой кнопкой мыши по проекту и выбрав эту опцию. Затем он добавил папку Nuget и три элемента в эту папку и ничего не сделал для решения проблемы. Я попытался восстановить и все еще получаю ту же ошибку выше.
Остин Харрис

Включает ли ваше решение папку .nuget и обновили ли вы NuGet до последней версии? Смотрите здесь: stackoverflow.com/questions/18833649/…
Дэвид Брабант

Да, попытался, и это не решило мою проблему сообщения об ошибках сборки.
Остин Харрис

Другая причина этой ошибки - The operation has timed out.ошибка. во время сборки. Необходимо проверить журнал сборки или вкладку « Диагностика » в информационном окне Visual Studio Online Builed Information.
Джошуа Дрейк

Ни одно из решений не работает для меня. Я загружаю из репозитория, и пакеты восстанавливаются в правильной файловой структуре для первого проекта, второй проект не может их найти. Проверка .csproj показывает, что используется правильный относительный путь, поэтому я не могу решить эту проблему. github.com/DanJ210/ProgrammersTest
Даниэль Джексон,

Ответы:


463

В моем случае мне пришлось удалить из файла .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-Integrated Restore Package к автоматическому восстановлению пакета ( http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore )


12
Это сработало для меня, но мне нужно было только удалить элемент <Target> </ Target>. VS [2013], казалось, восстановил его, если я также удалил элемент <Import>.
Роберт Тейлор

3
Это серьезно невероятно. Почему Microsoft делает все так сложно?
dimiguel

11
если это можно убрать, то почему оно там на первом месте?
OK999

1
OK9999, в какой-то момент вы должны были включить его из более ранней версии Visual Studio, щелкнув правой кнопкой мыши по решению и выбрав «Включить восстановление пакета NuGet», которое делало это по-старому. Нам это больше не нужно
Лорен Полсен

3
Я люблю решения, которые включают только удаление вещей.
Тодд

86

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

Когда вы перемещаете проект из одного места в другое, это прекрасно работает.
Дин Сео

4
@IvanSantiago Это уже было ОТВЕЧЕНО выше с тем же решением! .. Проголосуйте ВНИЗ! ..
Джек,

2
@ClintEastwood Мой ответ объяснил, КАК это сделать. В этом разница. Если пользователь ищет КАК мой ответ, в отличие от ответа выше.
Иван Сантьяго

2
@IvanSantiago Вы могли бы: добавить его в качестве комментария или отредактировать исходный ответ с помощью инструкции Как.
Колин

50

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

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


3
Аналогичная проблема .... Я переместил файл .csproj на уровень выше в структуре каталогов, и мне пришлось изменить его с ".. \ .. \ packages \ ..." на ".. \ packages \ ...".
tmgirvin

2
У меня была похожая проблема, но действительно странная. Я использовал его в модуле subolution, поэтому в этом решении все было хорошо, но когда я ссылался на это решение из другого решения, пакеты находились в другом месте. Я изменил .. \ packages на пакеты $ (SolutionDir) по всему .csproj, и это исправило это.
JoeNCA

2
Если вы не хотите копаться с файлом .csproj вручную, я обнаружил, что запись всех пакетов nuget, которые вы установили для проекта, удаление их и переустановка, решили эту проблему для меня. Я пытался удалить проект из решения, чтобы поместить его в собственный репозиторий git, когда столкнулся с этой проблемой.
WiteCastle

это означает, что ваш .csproj находится на том же уровне, что и ваш файл .sln?
Simon_Weaver

@Simon_Weaver положение вашего .csprojродственника .slnне имеет значения в этом контексте. Важно то, .csprojпереместилось ли что-то, на что есть ссылки в вашем, куда-то еще. Если так, то вам нужно это исправить. Если вы переместили ваш «.csproj» со всем, на что он ссылается, без изменений, но сохранили .slnего там, где он был, то вам придется зафиксировать .slnфайл в новом расположении .csproj-es, но редактировать .csprojфайлы не нужно .
Никита Григорьевич

22

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

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

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


7
Это старый способ восстановления пакетов nuget, и его следует избегать.
Человек

2
@TheMuffinMan: Не могли бы вы уточнить, что такое новый способ и почему его следует избегать (учитывая, что вывод ошибок VS 2013 говорит именно об этом)?
CantrianBear

2
@CantrianBear Перейдите на эту страницу docs.nuget.org/consume/package-restore и найдите раздел с названием MSBuild-Integrated Package Restore. Это старый способ, и в нем перечислены некоторые причины, по которым вам следует использовать новый способ.
Человек

Смотрите блог Дэвида Эббо на этом blog.davidebbo.com/2014/01/… Теперь ... "NuGet теперь всегда восстанавливает пакеты перед сборкой в VS".
timB33

17

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

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


11

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


8

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

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

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

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


1
Я полагаю, что это может быть проблема пути, так как я переместил расположение файлов, но я не вижу, где есть жестко закодированный путь. Я посмотрел в файле proj, и все файлы пакетов выглядят примерно так: <Reference Include = "Antlr3.Runtime, Version = 3.5.0.2, Culture = нейтральный, PublicKeyToken = eb42632606e9261f, processorArchitecture = MSIL"> <SpecificVersion> False </ SpecificVersion> <HintPath> .. \ packages \ Antlr.3.5.0.2 \ lib \ Antlr3.Runtime.dll </ HintPath> </ Reference>
Остин Харрис

добавление этого в web.config не помогло: <add key = "repositoryPath" value = ".. \ .. \ Packages" />
Остин Харрис

Вы не хотите добавлять это в web.config. Я имел в виду файл NuGet.config, и вы хотите проверить относительный путь. Где ваши пакеты относительно файлов csproj? Они в .. \ пакетах? Похоже, что пакеты восстанавливаются правильно, но ваши проекты выглядят не в том месте.
infojolt

6

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


Это сработало и для меня - но я понятия не имею, правильно ли было установить этот пакет (что имеет тот же эффект, что и изменение версии henkie14, приведенное ниже, или просто удалить все эти цели - они на самом деле делают что-нибудь полезное?
Gaz

В 1.0.21версии нет файлов в пакете, установка 1.0.14версии исправила это.
FLCL

4

Удалены строки ниже в файле .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>

3

Одним из решений будет удаление из файла .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}.


1

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

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

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

Все, что мне нужно было сделать, это включить восстановление пакета слепков для решения. Видимо все остальное уже было настроено правильно.
schmiddy98

1

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


1

Сначала попробуйте щелкнуть правой кнопкой мыши решение и выбрать «Восстановить пакеты Nuget».

В моем случае это не сработало, поэтому я следовал некоторым рекомендациям по удалению «Import» и «Target» в файле проекта, это сработало для 2 из 3 моих проектов, но в последнем возникла другая ошибка.

То, что работало, состояло в том, чтобы открыть Консоль диспетчера пакетов и выполнить:

Update-Package -reinstall -ProjectName MyProjectName

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


1

У меня такая же проблема. Я столкнулся с этим, когда скопировал существующий проект, перенес его в папку моего каталога решений и добавил как существующий проект в мое пустое решение. Поэтому я должен отредактировать свой файл csproj и найти эту конкретную строку кода, в большинстве случаев это можно найти в последних строках:

  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

После этой строки я должен закомментировать это:

  <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. Use 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('..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props'))" />
    <Error Condition="!Exists('..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets'))" />
  </Target>
  <Import Project="..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets" Condition="Exists('..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" />

Ваше решение подскажет, что в вашем проекте произошли изменения, просто выберите Обновить все:

введите описание изображения здесь Тогда все работает нормально после восстановления моего решения.


0

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

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

Например: моя библиотека классов имела log4net 1.2.3, но мое веб-приложение имело 1.2.6

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


0

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

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

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

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

Сказав это, и пусть снова EntityFramework будет отсутствующим пакетом, вы можете выполнить следующую команду в консоли диспетчера пакетов:

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>


-1

Я создал папку с именем «.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>

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.