Visual Studio + Azure - 将引用的引用复制到输出目录进行部署

4

我的Azure Web项目突然出现了一个程序集绑定错误——无法找到Microsoft.Data.Edm v5.6.2.0。

我的项目从nuget包引用了该程序集的版本。

我发现的情况是:

  • 当我构建项目时,bin\文件夹包含正确版本的程序集。
  • 当我将项目部署到Azure模拟器时,bin\中的程序集被覆盖为旧版本:v5.6.0.0。

旧版本未被任何解决方案中的项目引用,但它被Microsoft.WindowsAzure.Storage v4.2.1.0引用,后者又被我的项目引用。

(实际上,Storage程序集引用了我项目也引用的三个较新程序集的旧版本:Microsoft.Data.Edm、Microsoft.Data.OData和Microsoft.Data.Services.Client。在部署时,所有三个较新程序集都被覆盖为旧程序集)。

这种行为突然发生了:我正在进行一些维护迭代,今天下午按下了20次Ctrl+F5,突然看到了这个错误。

  • 新版本在Web项目的 bin\ 文件夹中被覆盖,但未在[azure project]\csx\Debug\roles\[web project name]\approot\bin[azure project]\obj\Debug\[web project name]\bin文件夹中被覆盖。
  • 受影响的引用已设置为本地复制。
  • 项目文件的差异显示自上次提交以来没有更改。
  • 同一解决方案中的Azure worker角色具有相同的引用集,但不受影响。
  • 重启VS或重新启动电脑均未解决问题。

是否有办法让Visual Studio恢复正常?

1个回答

3

欢迎来到疯狂城镇:

  1. 注意旧程序集的时间戳,这些程序集将覆盖较新的程序集
  2. c:\> dir /s microsoft.data.edm.dll
  3. 发现,在 ~20 个副本中,时间戳与 C:\Program Files (x86)\Microsoft WCF Data Services\5.6\bin\.NETFramework 中的文件匹配 - 这是我从未使用过的文件
  4. 删除这些副本并重新构建
  5. 发现三个引用中有两个不再被部署时覆盖,但 Microsoft.Data.Services.Client.dll 仍然被覆盖了! - 但来自另一个时间戳的源文件
  6. 找到该文件的来源:它在 C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\v2.3\ref
  7. 删除它,并重新构建 - 不再有覆盖!问题得到解决!

我只希望我知道为什么...


我看到了完全相同的问题/解决方案。一定有一个非常糟糕编写的构建目标。 - RMD
我还要补充一点,在我的情况下,Azure和WCF库都有多个SDK版本,我不得不全部删除。 - RMD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接