未签名的 .NET 应用程序在现场升级到已签名的程序集依赖项后失败
Unsigned .NET app fails after field upgrade to signed assembly dependency
我有一个未签名的测试应用程序 MyApp,它引用了一个未签名的 DLL MyDll。我最近签署了 MyDll 并想在现场针对 MyApp 对其进行测试,但该应用程序不再运行。我只是通过覆盖 MyDll 来做到这一点。我不想重新编译 MyApp。
Fusion 日志查看器证明问题出在不匹配的 public 键上:
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?
更改依赖项签名(无论是删除签名、添加签名还是将其交换为另一个签名)需要您使用新使用的依赖项签名重新编译程序集。
签名的重点是确保仅在签名匹配时加载依赖项。没有升级或优先级。 A 签名与 no 签名不匹配。
由于这是一项安全功能,您无法通过应用程序配置条目来规避它。
我有一个未签名的测试应用程序 MyApp,它引用了一个未签名的 DLL MyDll。我最近签署了 MyDll 并想在现场针对 MyApp 对其进行测试,但该应用程序不再运行。我只是通过覆盖 MyDll 来做到这一点。我不想重新编译 MyApp。
Fusion 日志查看器证明问题出在不匹配的 public 键上:
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?
更改依赖项签名(无论是删除签名、添加签名还是将其交换为另一个签名)需要您使用新使用的依赖项签名重新编译程序集。
签名的重点是确保仅在签名匹配时加载依赖项。没有升级或优先级。 A 签名与 no 签名不匹配。
由于这是一项安全功能,您无法通过应用程序配置条目来规避它。