我需要将一些程序从一台服务器迁移到另一台服务器。在此过程中,我发现我们缺少一个 .dll - 我在原始服务器上对其进行了跟踪。它既在文件系统上(在似乎是一个存储目录,没有链接到任何东西)和 GAC。我将存储目录中的 .dll 放到新服务器上,并尝试使用 GACUtil 安装它 - 但它失败并显示以下消息:
Failure adding assembly to cache: Attempt to install an assembly without a strong name
这对我来说似乎很奇怪,因为它显然已成功安装在以前的服务器上(两个 .dll 的版本 #s 相同)。但是,由于我没有此 .dll 的源代码,因此 GAC 中的版本可能被重新编译为强命名,并且“存储”中的版本没有更新。
一种可能的解决方法是手动安装 .dll。在 C:\Windows\Microsoft .NET\assembly\ 中存在 .NET 4.0 分隔的 GAC 目录结构,我可以在其中创建一个 GAC_MSIL\[.dllname]\v###__[PublicKey]\ 文件夹,使用相同的公共密钥作为旧服务器上的 GAC 实现,并将 .dll 文件放在那里。但是,.dll 绝对不是用 .NET 4.0(甚至是 .NET 3.5,我不认为)编译的——所以这还能用吗?或者我必须做出哪些改变才能让它发挥作用?
我不知道如何手动将某些东西安装到“旧”GAC 中,即带有 Windows 资源管理器 GUI 的那个,因为目录结构没有暴露给我。这个答案(https://stackoverflow.com/a/382318/1675729)似乎表明有一个基础结构,我可以尝试类似的手动安装方法 - 如果这可行,有人可以给我更多信息关于如何访问该结构?
当然,如果有办法将弱命名的 .dll 安装到 GAC 中,那将是理想的选择。这个 .dll 不会导致任何 .dll 地狱般的问题,因为它有特定的用途(和名称),并且只会被一个程序使用。但是,我不知道如何做到这一点,而且由于它似乎完全违背了 GAC 的目的,因此缺乏相关信息我并不感到惊讶。
我对任何和所有建议持开放态度,并且很乐意提供更多我可以提供的信息——我不确定这里有什么重要的注意事项。
非常感谢!