3

我有一个 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 项目

4

2 回答 2

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>
于 2013-06-12T22:44:30.480 回答
1

完整的解释现在可以在我的博客文章中找到

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

于 2013-06-17T22:23:31.237 回答