我有一个VS 2005 C#项目,它使用一个特殊的Plugin文件夹来加载额外的DLL(用作资产转换过程中的节点)。
我在这个文件夹中混合使用了C#和C ++ DLL。
我遇到的问题是,当启用了Shadow Copying时,C ++ DLL拒绝使用Assembly.LoadFrom加载。我试图创建一个自定义应用程序域,并使用了Load,但这也失败了。
最后,我尝试在byte []数据中读取DLL并使用Load on - 再次,只有C#DLL才会以这种方式工作,并显示错误“附加信息:无法验证的代码失败策略检查。(HRESULT异常) :0x80131402)“。
网上的一篇文章促使我在构建特定的DLL时尝试使用/ clr:safe,但由于Microsoft代码中存在数千个错误而无法构建...(显然)
禁用Shadow Copying后,LoadFrom适用于所有DLL。该应用程序本身就是Maya的插件,过去常用于Maya 8.5,但在2008/2009失败(如果启用了Shadow Copying)。
我们真的更喜欢使用Shadow Copying,因为它会在应用程序运行时阻止DLL文件锁定(插件文件夹存储在Perforce可以在应用程序运行时更新的位置)。
有关如何说服Shadow Copying使用自定义文件夹和混合使用C#/ C ++ DLL而没有这些问题的任何想法?
答案 0 :(得分:1)
听起来像是一个信任问题。尝试获取Fusion日志(请参阅this blog post)。您的C ++ DLL无法验证,因为它们未使用/clr:safe
进行编译,因此它们只能作为完全信任加载。据推测,在进行卷影复制时,下载缓存位置没有完全信任。
如果这只是一个开发问题,那么运行caspol -s
可能会让您启动并运行。
答案 1 :(得分:0)
Assembly.Load(byte [] ...)明确禁止无法验证(混合模式)程序集。您可以在Microsoft Connect上查看问题。