【问题标题】:How to fully trust a non-signed assembly?如何完全信任未签名的程序集?
【发布时间】: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


【解决方案1】:

该异常通常是由缺少 dll 引起的。可以使用的一件事是 ProcMon。当加载丢失的 dll 并通过错误时,文件名应显示在 ProcMon 中。

【讨论】:

    猜你喜欢
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2018-03-05
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    相关资源
    最近更新 更多