我有一个 VS 2005 C# 项目,它使用特殊的 Plugin 文件夹来加载额外的 DLL(用作资产转换过程中的节点)。
我在此文件夹中混合了 C# 和 C++ DLL。
我遇到的问题是,启用卷影复制后,C++ DLL 拒绝使用 Assembly.LoadFrom 加载。我尝试创建自定义应用程序域并使用 Load,但这也失败了。
最后,我尝试以 byte[] 数据的形式读取 DLL,并对其使用 Load - 同样,只有 C# DLL 才能以这种方式工作,并出现错误“附加信息:无法验证的代码未通过策略检查。(来自 HRESULT 的异常:0x80131402) ”。
网上的一篇文章提示我在构建该特定 DLL 时尝试使用 /clr:safe,但由于 Microsoft 代码中存在数千个错误,它根本无法构建......(显然)
禁用卷影复制后,LoadFrom 对于所有 DLL 都可以正常工作。该应用程序本身是 Maya 的一个插件,过去可以与 Maya 8.5 一起使用,但在 2008 / 2009 中失败(如果启用了卷影复制)。
我们确实更喜欢使用卷影复制,因为它可以防止应用程序运行时 DLL 文件锁定(Plugins 文件夹存储在 Perforce 可以在应用程序运行时更新的位置)。
关于如何说服卷影复制与自定义文件夹和 C#/C++ DLL 混合使用而不会出现这些问题,有什么想法吗?
听起来像是一个信任问题。尝试获取 Fusion 日志(请参阅这篇博文 http://blogs.msdn.com/suzcook/archive/2003/05/29/57120.aspx)。您的 C++ DLL 无法验证,因为它们不是用/clr:safe
,因此只能将它们加载为完全信任。据推测,在进行卷影复制时,下载缓存位置没有完全信任。
Running caspol -s
如果这只是开发问题,可能会让您启动并运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)