情况如下:
我有一个在.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.2.2.myDLL.dll文件从\ bin \ release复制到\ assembly,或者使用gacutil失败。
答案 0 :(得分:5)
问题是正在为.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.您应指定完整路径以确保使用正确的路径。