Цей проект посилається на пакунки NuGet, які відсутні на цьому комп’ютері


313

У мене є програма ASP.NET MVC5, яка працювала вчора, і тепер я отримую цю помилку, коли намагаюся створити:

Цей проект посилається на пакунки NuGet, які відсутні на цьому комп’ютері.

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


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

Чи включає ваше рішення папку .nuget і ви оновили NuGet до останньої версії? Дивіться тут: stackoverflow.com/questions/18833649/…
Девід Брабант

Так, спробував це, і це не вирішило мою проблему повідомлення про помилку побудови.
Остін Харріс

Ще одна причина цієї помилки - The operation has timed out.помилка. під час збірки. Потрібно перевірити журнал збірки або вкладку Діагностика на екрані інформації про збірку Visual Studio Online Build Failed.
Джошуа Дрейк

Жодне з рішень не працює для мене. Я завантажую з репо-файлу і відновлення пакунків у правильній структурі файлів для першого проекту, другий проект не може їх знайти. Перевірка .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 Package Restore в автоматичне відновлення пакунків ( http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore )


12
Це працювало для мене, але мені потрібно було лише видалити елемент <Target> </Target>. VS [2013], здавалося, відновив його, якщо я також видалив елемент <Import>.
Роберт Тейлор

3
Це серйозно неймовірно. Чому Microsoft робить все настільки важким?
dimiguel

10
якщо це можна зняти, чому це на першому місці?
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 на рівень структури каталогів, і довелося змінити його з ".. \ .. \ пакети \ ..." на ".. \ пакети \ ...".
tmgirvin

2
У мене було подібне питання, але насправді дивне. Я використовував його в модулі дозволу, тому він був добре в цьому рішенні, але коли я посилався на це рішення з іншого рішення, пакунки знаходилися в іншому місці. Я змінив .. \ пакети на $ (SolutionDir) пакети протягом усієї .csproj і це виправив.
JoeNCA

2
Якщо ви не хочете спілкуватися з файлом .csproj вручну, я виявив, що прийняття до відома всіх встановлених вами пакунків для проекту, видалення та перевстановлення їх вирішило цю проблему для мене. Я намагався видалити проект із рішення, яке потрібно розмістити у власному сховищі git, коли я зіткнувся з цією проблемою.
WiteCastle

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

@Simon_Waver в цьому контексті не має значення позиції вашого .csprojродича щодо вашої .sln. Важливо те, чи щось, на що йдеться у вашому .csproj, переїхало кудись інше. Якщо так, то вам потрібно це виправити. Якщо ви перемістили ".csproj" із усім, на що він посилається, недоторканим, але зберегли своє місце, .slnде воно було, тоді вам доведеться виправити .slnфайл у новому місці .csproj-es, але редагувати .csprojфайли не потрібно .
Микита Г.

22

Я легко вирішую цю проблему, клацнувши правою кнопкою миші на моєму рішенні, а потім натисніть на опцію Увімкнути відновлення пакета NuGet

(PS: Переконайтеся, що ви встановили Nuget Install з інструментів -> Розширення та оновлення -> Nuget Package Manager для Visual Studio 2013. Якщо спочатку не встановити це розширення)

Сподіваюся, це допомагає.


7
Це старий спосіб відновлення пакунків з нуля, і цього слід уникати.
The Muffin Man

2
@TheMuffinMan: Чи можете ви, будь ласка, уточнити, що таке новий спосіб, і чому цього слід уникати (враховуючи, що вихід VS 2013 помилки говорить вам зробити саме це)?
CantrianBear

2
@CantrianBear Перейдіть на цю сторінку docs.nuget.org/consume/package-restore та знайдіть розділ під назвою MSBuild-Integrated Package Restore. Це старий спосіб, і в ньому перераховані деякі причини, чому слід використовувати новий спосіб.
The Muffin Man

Дивіться блог Девіда Еббо на цьому blog.davidebbo.com/2014/01/… Тепер ... "NuGet тепер завжди відновлює пакети перед побудовою в VS."
timB33

17

У моєму випадку це стосувалося версії Microsoft.Build.Bcl. Моя версія нут-пакета була 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, і всі файли пакунків здаються такими відносними: <Посилання включає = "Antlr3.Runtime, версія = 3.5.0.2, культура = нейтральна, PublicKeyToken = eb42632606e9261f, ProcessArchitecture = MSIL"> <SpecificVersion> False </SpecificVersion> <HintPath> .. \ пакети \ 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, щоб завантажити їх. Для отримання додаткової інформації див. Http://go.microsoft.com/fwlink/?LinkID=322105 . Файл відсутній {0}.


1

Це кроки, які я використав для вирішення проблеми:

Щоб додати нуджеві пакети до свого рішення:

  1. Клацніть правою кнопкою миші на проект (не рішення), на який хочете посилатись на цілі пакети.
  2. Виберіть: Керуйте пакунками цілих пакетів
  3. У спливаючому вікні зліва у вас є три варіанти. Якщо ви вибрали Інтернет> Microsoft & .NET , ви зможете встановити пакунок пакунків Microsoft ASP.NET Web API 2.2 (або будь-який пакет, який вам потрібен - це був мій).
  4. Тепер клацніть правою кнопкою миші на вашому рішенні (не проект) та оберіть Увімкнути відновлення пакунків нута . Це призведе до автоматичного завантаження пакунків при компіляції.

Все, що мені потрібно було зробити, це включити відновлення пакету самородків для рішення. Мабуть, все інше було вже налаштовано правильно.
schmiddy98

1

Для мене це працювало, коли я просто скопіював папку .nuget з робочого рішення на існуючу і посилався на її вміст!


1

Перше, що потрібно спробувати - це клацнути правою кнопкою миші рішення та вибрати "Відновити Nuget пакети".

У моєму випадку це не спрацювало, тому я дотримувався деяких рекомендацій щодо видалення файлів проекту "Імпорт" та "Ціль". Це працювало для двох моїх 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,

проблема полягала в невідповідності номера версії пакету між двома проектами.

Наприклад: у моїй бібліотеці класів був log4net 1.2.3, але у мого веб-сайту 1.2.6

виправлення: просто переконайтеся, що для обох проектів вказаний однаковий номер версії.


0

Редагування .sln та .csproj не завжди є таким простим чи бажаним. Після отримання списку помилок ви можете побачити, у яких проектах відсутні пакети (також вузол References зазвичай вказує на відсутність збірок, якщо пакети не є вихідним кодом, ресурсами, зображеннями або просто текстовими).

Видалення та додавання пакетів не є хорошою ідеєю, якщо ви не використовуєте останню версію пакета. Інакше будьте готові до сюрпризів, не завжди приємних.

Якщо, скажімо, пакет є EntityFramework, то з галереї NuGet ви отримуєте останню версію, яка на момент написання цього коментаря становила 6.1.3 .

Тож, можливо, найбезпечніший спосіб вирішити ситуацію - відновити відсутні пакети один за одним. Так, трохи болюча вправа, але переслідування тонких помилок через різну версію пакета може бути набагато неприємнішим.

Зауваживши це, і нехай знову EntityFramework буде відсутнім пакетом, ви можете випустити таку команду в консолі Package-Manager:

PM> Install-Package EntityFramework -Version 6.0.1 

Це встановить правильну версію, тобто 6.0.1 , тобто ту, яку вказано в пакетах.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.