【问题标题】:What is AutoUnify and why is it causing working tests to fail in TFS 2015什么是 AutoUnify,为什么它会导致 TFS 2015 中的工作测试失败
【发布时间】:2016-01-20 06:12:50
【问题描述】:

我们正在运行我们自己的 NuGet 服务器来打包我们自己的项目。在这种情况下,我们正在重用一些测试构建器。单元测试在本地运行时通过,但通过 TFS 2015 时有些失败并出现以下错误。

我已经在这些项目/包中完成了在文件中的查找以定位 2.6.4 依赖项,但没有成功。

什么是 AutoUnify,AutoUnify 在哪里配置?禁用 AutoUnify 是解决此问题的正确方法吗?

 Unified Dependency "nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77".
         Using this version instead of original version "2.6.3.13283" in "D:\Agents\Agent1\c81e9061\eServices\.NugetLocalCache\EnterpriseApplications.Framework.Testing.1.0.0.0\lib\net45\EnterpriseApplications.Framework.Testing.dll" because AutoUnify is 'true'.
         Using this version instead of original version "2.6.3.13283" in "D:\Agents\Agent1\c81e9061\eServices\.NugetLocalCache\EnterpriseApplications.Framework.Testing.Mvc.1.0.0.0\lib\net451\EnterpriseApplications.Framework.Testing.Mvc.dll" because AutoUnify is 'true'.
         Could not resolve this reference. Could not locate the assembly "nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.

更新:关于 AutoUnify 的一个很好的解释是通过 MSDN,但这并没有解释如何禁用

更新:由于构建定义正在使用 NUnit 测试适配器的版本,这些特定测试仅通过 TFS 构建失败。让这个问题悬而未决,因为听听 AutoUnify 的配置位置会很有趣。

【问题讨论】:

  • 您是否尝试使用 TFS 构建恢复 NuGet 包?请查看stackoverflow.com/questions/32101429/…
  • 我们的定义中有一个有效的构建步骤,可以正确恢复 NuGet 包。此特定问题是由于 TFS Build 使用的 NUnit 测试适配器版本造成的。我没有回答这个问题,因为我主要是想了解有关 AutoUnify 以及如何启用/禁用的更多信息。

标签: unit-testing tfs nuget tfsbuild


【解决方案1】:

不确定有没有办法直接“禁用”自动统一...但是在 VS2017 中,当存在依赖项冲突时,您可以使构建失败。当构建失败时,它会告诉您确切的冲突 dll 以及它们所在的项目。

使用此自定义属性修改您的 .csproj

<MSBuildWarningsAsErrors>MSB3277</MSBuildWarningsAsErrors>

或者在解决方案级别创建一个 Directory.Build.props 文件以影响该解决方案中的所有项目。 Directory.Build.props 应该有类似这个 xml 的东西:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
   <MSBuildWarningsAsErrors>MSB3277</MSBuildWarningsAsErrors>
  </PropertyGroup>
</Project>

【讨论】:

    【解决方案2】:

    似乎禁用自动绑定重定向的唯一方法是手动编辑单元测试项目的项目文件(.csproj.vbproj)。 link in Rob's answer 将引导您完成操作,但本质上它只是更改了这一行:

    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    

    到这里:

    <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
    

    【讨论】:

      【解决方案3】:

      我有一个单元测试在运行时失败,并且还看到了有关冲突的警告。它说要检查 VERBOSE 上的构建日志,我看到了与您类似的消息。

      我发现我的 Unit Tests app.config 中有程序集信息指向有问题的程序集。

      我通过安装最新的 RestSharp 和 JSON.net 包来创建问题,然后我将它们降级到低得多的版本。 app.config 中的程序集信息指向这些版本。这可以通过从 app.config 中清除这些来解决。

      【讨论】:

        【解决方案4】:

        启用/禁用自动绑定重定向似乎启用/禁用报告为 AutoUnify 的内容

        有关启用/禁用自动绑定重定向的信息 click here

        【讨论】:

          【解决方案5】:

          我也遇到了同样的问题:

          在 App.config 中有几个 &lt;dependentAssembly&gt; 指定的程序集版本高于参考包之一。

          例如需要 Microsoft.Extensions.DependencyInjection.Abstractions, 2.2.0 NuGet 包并正确引用和安装/恢复。

          app.conf文件需要/统一更高版本:

          <dependentAssembly>
                  <assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
                  <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
          </dependentAssembly>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-12-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-28
            • 2019-10-23
            • 2021-04-06
            相关资源
            最近更新 更多