我的 Azure Web 项目刚刚开始出现程序集绑定(bind)错误 - 找不到 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 项目]\csx\Debug\roles\中不会被覆盖[Web 项目名称]\approot\bin
或[azure 项目]\obj\Debug\[Web 项目名称]\bin
文件夹 - 受影响的引用设置为复制本地
- 项目文件的差异显示自上次提交以来没有任何更改
- 同一解决方案中的 Azure 辅助角色具有相同的引用集,但不受影响
- 重新启动 VS 或重新启动都无法解决问题
有没有办法让 Visual Studio 重新站稳脚跟?
最佳答案
欢迎来到疯狂小镇:
- 注意覆盖新程序集的旧程序集的时间戳
c:\> dir/s microsoft.data.edm.dll
- 发现,在大约 20 个副本中,时间戳与
C:\Program Files (x86)\Microsoft WCF Data Services\5.6\bin\.NETFramework
中的文件相匹配 - 没用过 - 删除这些副本并重建
- 看到三个引用中的两个在部署时不再被覆盖,但 Microsoft.Data.Services.Client.dll 仍然如此! - 但来自具有另一个时间戳的源文件
- 查找该文件的来源:它位于
C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\v2.3\ref
- 删除它,然后重建 - 不再覆盖!问题解决了!
我只希望知道为什么......
关于.net - Visual Studio + Azure - 部署将引用复制到输出目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25694797/