Непрерывная интеграция VSTS: на этом компьютере отсутствуют пакеты NuGet

Я использую Visual Studio 2015, у меня есть решение с 2 различными веб-приложениями. Существует одно решение и два проекта под ним. Файлы, связанные с самородком, распространяются как:

  1. Папка с пакетами находится в каталоге решений
  2. Package.config в каждом каталоге проекта

В моем решении нет папки nugget: nugget.config и nugget.exe.

Мой проект собран и хорошо работает в Visual Studio, но я сталкиваюсь с проблемой при использовании VSTS Continuous Integration с Build Solution Step (который использует определение сборки, которое сопоставляется с одним проектом), которое дает:

This project references NuGet package(s) that are missing on this computer. Use 
NuGet Package Restore to download them. For more information, see  The missing file is 
..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props.

Это файл MyProject.csproj:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>
    </ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{BBD26A49-D1F4-4391-9D60-2469433DEE0D}</ProjectGuid>
    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>AdminUI</RootNamespace>
    <AssemblyName>AdminUI</AssemblyName>
    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
    <MvcBuildViews>false</MvcBuildViews>
    <UseIISExpress>true</UseIISExpress>
    <IISExpressSSLPort />
    <IISExpressAnonymousAuthentication />
    <IISExpressWindowsAuthentication />
    <IISExpressUseClassicPipelineMode />
    <UseGlobalApplicationHostFile />
    <SccProjectName>SAK</SccProjectName>
    <SccLocalPath>SAK</SccLocalPath>
    <SccAuxPath>SAK</SccAuxPath>
    <SccProvider>SAK</SccProvider>
    <NuGetPackageImportStamp>
    </NuGetPackageImportStamp>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

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

<Reference Include="WebGrease">
      <Private>True</Private>
      <HintPath>..\packages\WebGrease.1.5.2\lib\WebGrease.dll</HintPath>
    </Reference>
    <Reference Include="Antlr3.Runtime">
      <Private>True</Private>
      <HintPath>..\packages\Antlr.3.4.1.9004\lib\Antlr3.Runtime.dll</HintPath>
    </Reference>

Это также конец файла myProject.csproj:

<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\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props'))" />
    <Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
  </Target>

Мне интересно, почему он выдает эту ошибку, принимая во внимание, что этот пакет уже установлен на предыдущем шаге "Nugget Install". Почему это не может найти это? я потратил много времени на эту проблему!

2 ответа

Решение

На самом деле, это сработало для меня:

Добавление сопоставления (конфигурация репозитория) в папку пакетов в решении

Конфигурация хранилища

введите описание изображения здесь

Nuget Install Config

введите описание изображения здесь

Тогда это сработало как шарм.

Прежде чем добавить задачу сборки, вы можете добавить задачу установки или восстановления nuget. Это восстановит / установит пакеты nuget в агенте сборки.

Обеспечьте Package.config упомянутый вами файл существует в системе контроля версий.

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