代码之家  ›  专栏  ›  技术社区  ›  Chris

使用jenkins生成时,msbuild未为nuget packagereference添加/引用

  •  0
  • Chris  · 技术社区  · 5 年前

    我有一个jenkins构建,它清理、恢复,然后构建一个单元测试项目。这个项目和我的其他项目最近被迁移到 PackageReference . 清洁工作,恢复工作。我证实修女存在于 %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,因为编译命令不包含对nunit nuget包的“/引用”。

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

    我的其他项目确实有用于nuget包的'/reference'。所以我比较了它们,看看有没有什么明显不同。我确实注意到,我的大多数项目在开始时都包括这一行:

    <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>
    
    0 回复  |  直到 5 年前
        1
  •  1
  •   Isaiah4110    5 年前

    请比较本地和生成服务器上的msbuild版本。看起来您可能在不支持包引用的生成服务器上运行了较低版本的msbuild。

    推荐文章