c# - gacutil 和环境中的次要版本差异导致严重问题

标签 c# .net version c#-2.0 global-assembly-cache

情况是这样的:

我有一个在 .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());
        }
    }
}

我的 Environment.Version 是 2.0.50727.5466。

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

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

最佳答案

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

%PROGRAMFILES(X86)%\Microsoft SDKs\Windows\v7.0A\Bin 中有一个 al.exe,%PROGRAMFILES(X86)%\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 中还有一个工具。它们都有相同的版本号,但第一个是针对 .NET 2.x 的,后者是针对 .NET 4.x 的。您应该指定完整路径以确保您使用的是正确的路径。

关于c# - gacutil 和环境中的次要版本差异导致严重问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17068452/

相关文章:

c# - 如何使用 Dapper ORM 返回动态类型 List<dynamic>

.net - 升级 .NET 应用程序数据层

c# - 如何检查实体是否是 foreach 循环的第一个元素

c# - MSBuild:导入的项目...找不到 Sdk.props

c# - xmlns :dc mean in C# WPF? 是什么

.net - CopyPixelOperation.SourceInvert 不起作用

android - 最新 AOSP 中最新版本的 ADB 是什么?

maven - 在不操作POM文件的情况下更改Maven项目的版本

android - adb命令从apk获取versionCode

c# - 每个 session ASP.net 4.6 MVC 5 个 Autofac 对象