这有点跟进:Reference alternate to reference assembly in Visual Studio 2010?
我正在引用核心框架DLL的替代版本。 Visual Studio(和本地调试器结构)引用此文件没有问题。此外,该文件标记为Copy Local
。但是,当我部署到云端时,我得到:
无法加载文件或程序集'(程序集强名称)'或其依赖项之一。定位的程序集的清单定义与程序集引用不匹配。
使用远程桌面,我确定正确的文件确实在E:\approot
文件夹中以及我的其他依赖项。我假设结构正在寻找GAC而不是使用我的文件。
有没有办法强制它先使用我的DLL?
注意:无论如何,替换.NET CLR DLL的整个概念是一个巨大的黑客,所以欢迎黑客攻击。当.NET 4.5出现支持我需要的功能时,这一切都将被删除。
更多信息:看来我的网络角色工作正常,但是当我的工作人员角色在尝试构建我的Autofac容器时因该错误而死亡。即使我在构建之前显式加载程序集也会发生这种情况,这也可以正常工作。
答案 0 :(得分:1)
您可以尝试使用Appdomain.AssemblyResolve事件来捕获它并手动加载它。但是,我不知道它是否被解雇了,这是一种解决方法。
答案 1 :(得分:1)
您可以运行融合日志以查看其加载位置。如果正在运行其他内容并且首先加载该文件,则可能需要为该进程创建.config文件。您可以做一些异国情调,比如创建一个新的appdomain并在那里加载你的程序集,就像这对动态程序集一样:
http://blogs.msdn.com/b/tom/archive/2007/12/05/dynamic-assemblies-and-what-to-do-about-them.aspx
答案 2 :(得分:1)
你能尝试暗示将首先在本地文件夹中探测的CLR:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="." />
</assemblyBinding>
</runtime>
查看有关通过探测部分here定位装配的更多信息。这可能有所帮助。
答案 3 :(得分:-1)
如果其中一个项目没有针对.NET Framework版本,我已经看到过这个问题。也许检查以确保解决方案中的所有项目都具有相同的设置。