3

我有一个 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 的混合而没有这些问题的任何想法?

4

2 回答 2

1

听起来像是信任问题。尝试获取 Fusion 日志(请参阅此博客文章)。您的 C++ DLL 无法验证,因为它们不是用 编译的/clr:safe,因此它们只能作为完全信任加载。大概在卷影复制时,下载缓存位置没有完全信任。

如果这是一个仅用于开发的问题,运行caspol -s可能会让您启动并运行。

于 2008-11-07T14:52:55.303 回答
0

Assembly.Load(byte[] ...) 明确禁止无法验证的(混合模式)程序集。您可以在Microsoft Connect上检查问题。

于 2010-03-01T10:18:17.353 回答