gacul和环境中的小版本差异会导致严重的头痛

本文关键字:环境 gacul 版本 | 更新日期: 2023-09-27 18:18:07

情况如下:

我有一个在。net 2中编译的DLL,它在全局程序集缓存中。我有myDLL.dll.config文件,它读:

<configuration>
   <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="myDLL" publicKeyToken="c426c33bab532523" />
        <bindingRedirect oldVersion="1.2.2.0-1.2.2.22" newVersion="1.2.2.23" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

然后使用程序集链接器创建策略文件:

al /link:myDLL.dll.config /out:policy.1.2.myDLL.dll /keyfile:myDLL.snk

但是当我尝试使用

将策略文件加载到全局程序集缓存中时
gacutil -i policy.1.2.myDLL.dll

我得到错误:

Failure adding assembly to the cache:  This assembly is built by a 
runtime newer than the currently loaded runtime and cannot be loaded.  

.NET全局程序集缓存实用程序版本是2.0.50727.42,但我通过创建一个新的c# .NET 2控制台项目检查了构建环境上的版本,并执行以下命令:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            MessageBox.Show(Environment.Version.ToString());
        }
    }
}

和我的环境。版本号:2.0.50727.5466

这一切都发生在同一台计算机上,特别是我的开发盒。

我可以将myDLL.dll从'bin'release文件夹复制到c:'Windows'assembly文件夹中,没问题。但是试图将policy.1.2.myDLL.dll文件从'bin'release复制到'assembly,或者使用gacutil失败。

gacul和环境中的小版本差异会导致严重的头痛

问题是策略程序集正在为。net 4.x编译。

在%PROGRAMFILES(X86)%'Microsoft sdk 'Windows'v7.0A'Bin和%PROGRAMFILES(X86)%'Microsoft sdk 'Windows'v7.0A'Bin'NETFX 4.0 Tools中有一个。它们都有相同的版本号,但第一个版本是针对。net 2的。后者用于。net 4.x。您应该指定完整路径,以确保您使用的是正确的路径。