Azure包包含不正确的DLL
本文关键字:DLL 不正确 包包含 Azure | 更新日期: 2023-09-27 18:24:23
在我的web和worker角色中,我引用了核心框架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的整个概念是一个巨大的破解。当.NET 4.5支持我需要的功能时,这一切都将被剥离。与此同时,我需要能够继续发展。
这是对"Azure引用不正确的DLL"问题的替代,该问题实际上是不正确的,并导致了有效的答案,但并没有解决我的问题
即使Visual Studio项目引用了GAC中程序集的本地和/或修改过的副本,它也会在编译过程中使用,但在运行时,CLR将始终从GAC加载程序集,即使它与应用程序位于同一目录中。
因此,该解决方案并不涉及找到一种聪明的方法来打包或部署修改后的程序集,而是要找到一种方法,使CLR在存在的情况下实际加载它。
两种可能的解决方案:
1) 使用角色启动任务和安装项目在生产服务器的GAC中部署程序集的修改版本。
2) 删除程序集的签名,并确保所有对此版本的引用都没有签名。请注意其他程序集,这些程序集可能正在引用原始签名版本,并将尝试从GAC加载该版本。
有关更多详细信息和链接,请参阅如何阻止.NET应用程序使用GAC中的程序集?