我有来自第三方提供商的dll。我从我的MVC项目中引用它,它一切正常。
我决定将使用该dll的所有代码提取到一个单独的项目中。然后我从我的MVC项目中删除了dll的引用,并引用了我的另一个项目,即该api的包装/抽象。
现在,我在服务器尝试加载时遇到以下错误:
Could not load file or assembly 'xxxx' or one of its dependencies. An attempt was made to load a program with an incorrect format.
我在这个网站和其他地方看到很多关于x64 vs x86和其他奇特场景的问题,但我不确定我的情况是否适用于此。可以肯定的是,我在两个项目上尝试了x86 / x64 /任何cpu的所有可能组合,但没有效果。
我在这里缺少什么,或者我做错了什么?
答案 0 :(得分:1)
问题很可能是由于您的计算机或您配置IIS的方式。最有可能的是,当IIS正在整理您的网站时,您的两个库会发生冲突。尝试检查您的应用程序池并查看“常规”部分。我在下面列出了一张图片:
如果第三方库严格是32位编译而您的服务器是64位,则需要确保将此选项设置为true。
答案 1 :(得分:1)
您可以尝试使用程序集绑定日志查看器获取更多信息。
http://msdn.microsoft.com/en-us/library/e74a18c4(v=VS.100).aspx
有关启用的详细信息,请参阅以下链接: How to enable assembly bind failure logging (Fusion) in .NET
答案 2 :(得分:0)
感谢the suggestion by Zephryl,我收到了以下程序集绑定日志:
LOG: User = IIS APPPOOL\DefaultAppPool
LOG: DisplayName = Laserfiche.I18n83
(Partial)
WRN: Partial binding information was supplied for an assembly:
WRN: Assembly Name: Laserfiche.I18n83 | Domain ID: 5
WRN: A partial bind occurs when only part of the assembly display name is provided.
WRN: This might result in the binder loading an incorrect assembly.
WRN: It is recommended to provide a fully specified textual identity for the assembly,
WRN: that consists of the simple name, version, culture, and public key token.
WRN: See whitepaper http://go.microsoft.com/fwlink/?LinkId=109270 for more information and common solutions to this issue.
我在我脑海中,所以我开始恐慌 - 谷歌搜索并跑过this SO post告诉我把东西设置为CopyLocal=true
。关于这意味着什么的谷歌搜索导致了一堆关于为什么它是邪恶和/或天才这样做的黑白意见,所以我认为这是一个洗,并为我的dll设置为真。这没有效果,但是我为这个第三方工具附带的伴侣dll设置了CopyLocal=true
,然后它突然开始工作了!
我不确定部分绑定究竟意味着什么,或者如何绕过它,或者是否有更好的方法,但这似乎可以解决问题。如果最终出现任何负面影响,我会在这里跟进。