Shadow Copying,以及从任意文件夹加载的混合C#和C ++ DLL

我有一个VS 2005 C#项目,它使用一个特殊的Plugin文件夹来加载额外的DLL(用作资产转换过程中的节点)。

我在这个文件夹中混合使用C#和C ++ DLL。

我遇到的问题是,启用卷影复制时,C ++ DLL拒绝使用Assembly.LoadFrom加载。 我试图创建一个自定义应用程序域,并使用Load,但这也失败了。

最后,我尝试在byte []数据中读取DLL并使用Load on – 再次,只有C#DLL才会以这种方式工作,并显示错误“附加信息:无法validation的代码失败策略检查。(HRESULTexception:0x80131402) ”。

网上的一篇文章促使我在构建特定的DLL时尝试使用/ clr:safe,但由于Microsoft代码中存在数千个错误而导致它无法构建…(显然)

禁用阴影复制后,LoadFrom适用于所有DLL。 该应用程序本身是Maya的一个插件,这曾经与Maya 8.5一起使用,但在2008/2009年失败(如果启用了Shadow Copying)。

我们真的更喜欢使用Shadow Copying,因为它可以在应用程序运行时阻止DLL文件锁定(Plugins文件夹存储在Perforce可以在应用程序运行时更新的位置)。

关于如何说服Shadow Copying使用自定义文件夹和混合使用C#/ C ++ DLL而没有这些问题的任何想法?

听起来像一个信任问题。 尝试获取Fusion日志(请参阅此博客文章 )。 您的C ++ DLL无法validation,因为它们未使用/clr:safe编译,因此它们只能作为完全信任加载。 据推测,当影子复制时,下载缓存位置没有完全信任。

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

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