【发布时间】:2012-06-04 13:10:34
【问题描述】:
我有一个程序集,在我自己的电脑上运行良好,但是当我尝试在虚拟机上引用它时,我收到以下错误:
System.IO.FileNotFoundException: Could not load file or assembly 'X.dll' or one of its ependencies. The specified module could not be found.
File name: 'X.dll'
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark&stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm,Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark)
at System.Reflection.Assembly.LoadFrom(String assemblyFile)
at kernelLoader.Program.Main(String[] args)
我绝对确定该文件位于指定的位置,并且代码在我自己的机器上运行良好(开发它的地方)。它与所有引用的程序集一起针对 x86 平台进行编译。
我认为,错误可能是由于程序集未被完全信任造成的。
我不能强唱程序集,因为它引用了几个没有唱过的程序集,而且我没有代码或修改权限。
我怀疑有一种好方法可以让我运行它的机器上信任一个程序集。
如何将程序集标记为受信任,以便可以加载和执行?
【问题讨论】:
-
检查是否存在缺少“X.dll”所依赖的第三个程序集。您的应用程序->X.dll->丢失。
-
我用反光板做到了。所有程序集似乎都存在。此外,在异常中,X.dll 被标记为丢失(文件名:'X.dll')
-
再次复制文件,复制的时候可能已经坏了。
-
是的,异常消息可能会产生误导。曾经在旧版本的 NHibernate 中经常看到这个异常(当没有强制将 Castle 依赖项包含在构建中时)。它无法加载 X.dll,因为它找不到 X.dll 需要的东西……这也可能是某些 .dll 不在 PATH 中(VM 上未安装的东西)的情况。 .尝试使用像Dependency Walker(而不是Reflector)这样的东西来看看它是否会嗅出其他东西...... Iirc,当涉及到不信任时,它是一个无效的操作异常,而当涉及到32位与64位时,它是一个错误的格式。
-
@Stefan:我已经试过很多次了
标签: c# .net security .net-assembly full-trust