【问题标题】:Visual Studio 2012 redirects bindings for Microsoft.TeamFoundation.Client.dllVisual Studio 2012 重定向 Microsoft.TeamFoundation.Client.dll 的绑定
【发布时间】:2013-06-12 16:24:35
【问题描述】:

我有一个 C#/.NET 4.0 项目,它是一个 DLL 库,其中包含一些用于 TFS 2010 构建工作流的自定义活动。项目编译完成,一切都在我们的开发箱上运行。

在我们的构建服务器上,我们最近安装了 Visual Studio 2012,发现我们的构建现在失败并出现此错误

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ReferenceAssemblies\v2.0\Microsoft.TeamFoundation.Client.dll: Assembly 'Microsoft.TeamFoundation.Client, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' uses 'Microsoft.TeamFoundation.Common, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' which has a higher version than referenced assembly 'Microsoft.TeamFoundation.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'

我搜索了高和低,但找不到所有对 Microsoft.TeamFoundation.Client.dll 的调用(在我们的 DEV 框上解析为 v 10.0.0)现在如何/为什么在构建服务器上解析为 11.0.0.0。我找不到任何程序集绑定重定向,没有发布者政策,什么都没有!

我只需要强制 MSBuild 和构建过程引用构建服务器上所有相关 DLL 的 v 10.0.0,而不是 v 11.0.0.0。任何帮助将不胜感激。

请注意,这与“XAML 工作流”问题无关,而是编译一个恰好引用 Microsoft.TeamFoundation.Client.dll 的 10.0.0.0 的 DLL 项目

【问题讨论】:

    标签: visual-studio-2012 msbuild tfsbuild


    【解决方案1】:

    在记事本中为您的自定义活动库打开 .csproj。更新 TFS 程序集引用,删除特定于版本的元数据。

    即使您将“特定版本”属性设置为 False,它仍然可能会将特定于版本的元数据附加到参考:

    <Reference Include="Microsoft.TeamFoundation, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>$(Dependencies)\TeamFoundationClient\Microsoft.TeamFoundation.dll</HintPath>
    </Reference>
    

    删除元数据应该可以正确构建该项目。

    <Reference Include="Microsoft.TeamFoundation">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>$(Dependencies)\TeamFoundationClient\Microsoft.TeamFoundation.dll</HintPath>
    </Reference>
    

    【讨论】:

    • 谢谢尼克。然而,这行不通,原因有很多。可以这么说,在没有版本特定信息的情况下,MSbuild 将始终自动解析为二进制文件的最新版本(特别是如果它是强命名的,它就是这样)。我已经设法解决了这个问题(在过去的 20 分钟内!),明天某个时候会发布一个答案(详细)。
    • @Nikhil,我遇到了完全相同的问题,删除元数据就是解决方案。您是否尝试过删除元数据,或者您认为由于“多种原因”而无法正常工作的结论只是您的假设?
    • 尼克我试过了。诚实地。它没有用。作为 MSBuild 上的一种 SME 以及 .NET 如何解析程序集引用,我有点理解它“不应该工作”的大部分原因。然而,当涉及到这些情况时,我们必须记住,它们是非常特定于环境的。正如我所说,我昨天对此进行了大量研究,并提出了一个可靠的解决方案。我很快就会在这里发布。
    • 我在一个环境中,人们使用 VS 2010、2012 和 2013。我不在乎我访问的是什么版本的 Microsoft.TeamFoundation,这解决了我的问题。谢谢!
    【解决方案2】:

    完整的解释现在可以在我的博文here上找到

    解决此问题的正确方法是确保 MSBuild 管道始终可靠地引用 Microsoft.TeamFoundation.* dll 的正确版本。在对解决方案进行了大量调查后,我们发现该解决方案在 .csproj 文件中为我们希望强制解析为特定版本的程序集设置了 SpecificVersion 标志为真。

    【讨论】:

      猜你喜欢
      • 2012-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      • 2014-08-02
      • 2015-11-06
      相关资源
      最近更新 更多