状況は次のとおりです。
グローバル アセンブリ キャッシュに入る .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 を使用しようとすると失敗します。