4

状況は次のとおりです。

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

4

1 に答える 1

6

問題は、ポリシー アセンブリが .NET 4.x 用にコンパイルされていることでした。

%PROGRAMFILES(X86)%\Microsoft SDKs\Windows\v7.0A\Bin と %PROGRAMFILES(X86)%\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools に al.exe があります。どちらも同じバージョン番号ですが、前者は .NET 2.x 用、後者は .NET 4.x 用です。正しいパスを使用していることを確認するために、絶対パスを指定する必要があります。

于 2013-06-12T18:46:49.140 に答える