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 引用,而我的项目又引用了它。

(事实上​​,存储程序集引用了我的项目也引用的三个程序集的旧版本: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 辅助角色具有相同的引用集但不受影响
  • 重启VS和重启都没有解决问题

有没有办法打败 Visual Studio?

4

1 回答 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. 删除它,然后重建 - 不再覆盖!问题解决了!

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

于 2014-09-06T00:37:23.870 回答