MSBuild не добавляет / ссылку для nuget PackageReference при сборке с помощью jenkins - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть сборка jenkins, которая очищает, восстанавливает, а затем создает проект модульного тестирования.Этот проект, наряду с моими другими, недавно был перенесен на использование PackageReference.Чистый работает, и восстановление работает.Я проверил, что NUnit существует в %userprofile%/.nuget/packages/.Вот команды, которые есть в моем скрипте сборки:

msbuild /p:Configuration="Debug" /t:clean OtherProjectName.Test.csproj
msbuild /p:Configuration="Debug" /t:restore OtherProjectName.Test.csproj
msbuild /p:Configuration="Debug" OtherProjectName.Test.csproj

Это позже приводит к выводу, который выглядит примерно так:

csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /define:DEBUG;TRACE /highentropyva+
     /reference:<one of my references> /reference:<another one> /reference:<and so on>
     /out:obj\Debug\OtherProjectName.Test.dll /subsystemversion:6.00 /target:library /utf8output <a list of source files>

Сборка для моего проекта не удалась, потому что он может 'не найти NUnit (см. ниже).Я считаю, что он не может найти NUnit, потому что команда компиляции не включает «/ reference» в пакет nuget NUnit.

error CS0246: The type or namespace name 'NUnit' could not be found (are you missing a using directive or an assembly reference?

В других моих проектах действительно есть «/ reference» для пакетов NuGet.Поэтому я сравнил их, чтобы увидеть, выглядит ли что-то значительно иначе.Я заметил, что большинство моих проектов включают эту строку в начале:

<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />

Я подумал, что это может быть причиной, основываясь на моем кратком чтении о том, что делает эта строка, но когда я попробовал те же шагина моем локальном компьютере (на нем установлены VS2017 и MSbuild 15, как на сервере jenkins), я не смог воспроизвести проблему.

Мой файл .csproj содержит следующее:

    <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{a guid}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>OtherProjectName.Test</RootNamespace>
    <AssemblyName>OtherProjectName.Test</AssemblyName>
    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
    <IsCodedUITest>False</IsCodedUITest>
    <TestProjectType>UnitTest</TestProjectType>
    <NuGetPackageImportStamp>
    </NuGetPackageImportStamp>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <!-- a couple entries like this -->
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="log4net">
      <HintPath>Z:\path\to\log4net.dll</HintPath>
    </Reference>
    <!-- a couple references like this -->
    <Reference Include="System" />
    <Reference Include="System.Configuration" />
    <Reference Include="System.Web.Extensions" />
    <Reference Include="System.Xml" />
    <Reference Include="WindowsBase" />
  </ItemGroup>
  <Choose>
    <When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
      <ItemGroup>
        <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
      </ItemGroup>
    </When>
    <Otherwise />
  </Choose>
  <ItemGroup>
    <!-- all my C# source files -->
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\OtherProjectName\OtherProjectName.csproj">
      <Project>{a guid}</Project>
      <Name>OtherProjectName</Name>
    </ProjectReference>
    <ProjectReference Include="..\OtherProjectName2\OtherProjectName2.csproj">
      <Project>{another guid}</Project>
      <Name>OtherProjectName2</Name>
    </ProjectReference>
  </ItemGroup>
  <ItemGroup>
    <None Include="App.config">
      <SubType>Designer</SubType>
    </None>
    <None Include="App.config.1" />
    <None Include="Unit Test Playlists\Fast.playlist" />
    <!-- all my unit test playlists -->
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="NUnit">
      <Version>3.11.0</Version>
    </PackageReference>
    <PackageReference Include="NUnit.ConsoleRunner">
      <Version>3.9.0</Version>
    </PackageReference>
    <PackageReference Include="NUnit3TestAdapter">
      <Version>3.11.0</Version>
    </PackageReference>
    <!-- other nuget packages -->
  </ItemGroup>
  <Choose>
    <When Condition="'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'">
      <ItemGroup>
        <Reference Include="Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
          <Private>False</Private>
        </Reference>
        <Reference Include="Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
          <Private>False</Private>
        </Reference>
        <Reference Include="Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
          <Private>False</Private>
        </Reference>
        <Reference Include="Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
          <Private>False</Private>
        </Reference>
      </ItemGroup>
    </When>
  </Choose>
  <Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>

1 Ответ

0 голосов
/ 19 февраля 2019

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

...