【问题标题】:Azure package contains incorrect DLLAzure 包包含不正确的 DLL
【发布时间】:2012-02-14 15:08:01
【问题描述】:

在我的网络和辅助角色中,我引用了核心框架 DLL 的替代版本。该文件标记为Copy Local。 Visual Studio 将正确的版本显示为项目参考。编译项目时,bin目录也包含正确的版本。

但是,当我要求 Visual Studio 创建一个 Azure 包时,该包(以及在打包过程中创建的 csx 文件夹)包含仅用于 Worker 角色的错误(原始)DLL。 Web 角色具有正确的 DLL。如果我手动使用cspack,则不会发生这种情况,但这并不是一种真正理想的打包方式。

什么可能导致 Visual Studio 使用正确的参考 DLL 进行编译,但捆绑了错误的参考 DLL?

附加信息: 当我运行 msbuild 而不是 Visual Studio 进行打包时,我看到以下两行:

Copying file from "C:\Users\bytenik\Dropbox\Treadmarks\lib\EntityFramework\System.Data.Entity.dll" to "C:\Users\bytenik\Dropbox\Treadmarks\src\Azure\obj\Debug\Worker\System.Data.Entity.dll".
Copying file from "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.Entity.dll" to "C:\Users\bytenik\Dropbox\Treadmarks\src\Azure\obj\Debug\Worker\System.Data.Entity.dll".

所以,它似乎复制了我的引用,然后用系统引用复制它。

注意:我很清楚替换 .NET CLR DLL 的整个概念是一个巨大的 hack。当 .NET 4.5 支持我需要的功能时,这一切都将被删除。与此同时,我需要能够继续开发。

这是对问题“Azure References Incorrect DLL”的替代,它实际上是不正确的,导致答案有效,但没有解决我的问题。

【问题讨论】:

  • 为了将来参考,最好重写原始问题。谢谢。
  • @Kev 我想过,但所有的答案都是没有意义的。

标签: c# .net azure dll


【解决方案1】:

即使 Visual Studio 项目引用了 GAC 中程序集的本地和/或修改副本,它也会在编译期间使用,但在运行时,CLR 将始终从GAC,即使它与您的应用程序位于同一目录中。

因此,该解决方案并不涉及找出一种巧妙的方法来打包或部署修改后的程序集,而是找出一种让 CLR 实际加载它的方法(如果它在那里)。

两种可能的解决方案:

1) 使用角色启动任务和安装项目将修改后的程序集版本部署到生产服务器的 GAC 中。

2) 删除程序集的签名,并确保所有引用都是在没有签名的情况下对该版本进行的。当心其他程序集可能引用原始签名版本并尝试从 GAC 加载它。

更多详情和链接见How to prevent a .NET application to use an assembly from the GAC?

【讨论】:

    猜你喜欢
    • 2016-04-16
    • 1970-01-01
    • 2014-05-16
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多