现场升级到已签名的程序集依赖项后,未签名的.NET应用程

时间:2017-04-28 05:49:40

标签: c# .net .net-assembly code-signing fusion

我有一个未签名的测试应用程序MyApp,它引用了一个未签名的DLL MyDll。我最近签署了MyDll并希望在现场对MyApp进行测试,但该应用程序不再运行。我只是通过覆盖MyDll来做到这一点。我不想重新编译MyApp。

Fusion日志查看器证明问题在于公钥不匹配:

LOG: Assembly Name is: MyDll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcd1234abcd1234
WRN: Comparing the assembly name resulted in the mismatch: PUBLIC KEY TOKEN
ERR: The assembly reference did not match the assembly definition found.
ERR: Run-from-source setup phase failed with hr = 0x80131040.
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

过去,我通过创建配置文件来解决版本不匹配问题,例如: MyApp.exe.config,其条目如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <publisherPolicy apply="no" />
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="MyDll" publicKeyToken="abcd1234abcd1234" culture="null" />
        <bindingRedirect oldVersion="1.0.0.0" newVersion="1.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

在这种特殊情况下,版本号没有改变,但我把它留在那里进行测试。

这显然没有改善任何事情。当我执行MyApp时,Fuslogvw确认我的配置文件已加载。是否有另一个配置元素要添加到我的配置文件中,这将允许我的未签名应用程序使用已签名的DLL?

1 个答案:

答案 0 :(得分:0)

更改依赖项签名(无论是删除签名,添加签名还是将其交换为另一个签名)都需要使用新的依赖关系签名重新编译程序集。

签名的目的是确保仅在签名匹配时加载依赖项。没有升级或优先事项。 A 签名与 no 签名不匹配。

由于这是一项安全功能,因此您无法通过应用程序配置条目来规避它。