我有一个 VS 2005 C# 项目,它使用一个特殊的插件文件夹来加载额外的 DLL(用作资产转换过程中的节点)。
我在这个文件夹中混合了 C# 和 C++ DLL。
我遇到的问题是,当启用影子复制时,C++ DLL 拒绝使用 Assembly.LoadFrom 加载。我试图创建一个自定义应用程序域,并使用了 Load,但这也失败了。
最后,我尝试将 DLL 作为 byte[] 数据读取并在其上使用 Load - 再次,只有 C# DLL 会以这种方式工作,并出现错误“附加信息:无法验证的代码未能通过策略检查。(来自 HRESULT 的异常:0x80131402) ”。
网上的一篇文章提示我在构建该特定 DLL 时尝试使用 /clr:safe,但由于 Microsoft 代码中的数千个错误,它根本无法构建......(显然)
禁用影子复制后,LoadFrom 对所有 DLL 都可以正常工作。该应用程序本身是 Maya 的插件,它曾经与 Maya 8.5 一起使用,但在 2008 / 2009 中失败(如果启用了 Shadow Copying)。
我们真的更喜欢使用影子复制,因为它可以在应用程序运行时防止 DLL 文件锁定(插件文件夹存储在 Perforce 可以在应用程序运行时更新的位置)。
关于如何说服 Shadow Copying 使用自定义文件夹和 C#/C++ DLL 的混合而没有这些问题的任何想法?