4

特定のバージョンの GDIPlus に依存関係を追加する必要があります。これは私が欲しいGDI +のバージョンです:

代替テキスト

特定の互換性の理由から、このバージョンを使用していることを確認したいと思います。

GdiPlusのバージョンへの依存関係を定義して、アセンブリ マニフェストを実行可能ファイルに追加しました。

<dependency>
   <dependentAssembly>
      <assemblyIdentity 
            type="win32" name="Microsoft.Windows.GdiPlus" 
            pubicKeyToken="6595b64144ccf1df" 
            version="5.1.3102.2180" processorArchitecture="x86"
            language="*" />
   </dependentAssembly>
</dependency>

アプリケーションを実行する場合を除いて、Windows の Fusion ローダーは、Side-by-Side フォルダーから別のバージョンの gdiplus.dll を提供します。これは、Process Explorer で確認できます。

代替テキスト

5.1.3102.2180ではなく、バージョン5.02.6002.18005を提供しています。

問題は、Windows dll の特定のバージョンに依存するにはどうすればよいかということです。

4

1 に答える 1

3

あなたの「問題」は、5.1.3102.2180 の要求を 5.02.6002.18005 にリダイレクトできることを指定するポリシー ファイルがインストールされていることです。

これは、通常、良いことです。これにより、アプリはマニフェストでビルド対象のバージョンを指定できますが、重要なセキュリティ修正が導入されると、OS はアプリを互換性のあるバージョンにリダイレクトできます。

つまり、ここで何が起こるかというと、5.1 しかインストールされていない PC 上の GDI+ 5.1 に対してアプリがリンクされます。ただし、5.2 GDI+ を搭載した PC では、そこにリダイレクトされます。

5.2 が利用可能であっても、5.1 を使用したい正当な理由がある場合は、アプリケーション構成ファイルを使用してそれを管理できると思います。

yourapp.exe.config というファイルを作成します。GDI+ をインポートするアプリのモジュールが dll の場合、thedll.dll.2.config になります。

ただし、bindingRedirect を構成する方法がわかりません。つまり、ポリシー ファイルのリダイレクトを考えると、古いバージョンをそれ自体にリダイレクトする必要があるのか​​、それとも新しいバージョンを古いバージョンに戻す必要があるのか​​ わかりません。または何。試行錯誤が必要になる場合があります。

.config ファイルのデータは、マニフェスト ファイルのデータとほとんど同じです。このようなもの (これは、望ましくないリダイレクトを行う winsxs にインストールされたポリシー ファイルの内容をほぼ正確に模倣します)。

<configuration>
  <windows>
    <assemblyBinding xmlns=...>
      <dependentAssembly name="GdiPlus...>
        <bindingRedirect oldVersion="5.1.x.x" newVersion="5.1.x.x"/>

「oldVersion」の選択を容易にするために、範囲構文がサポートされています。それで

oldVersion="5.0.0.0-5.3.0.0"

GdiPlus バージョンの全範囲が特定のバージョンにリダイレクトされるようにする簡単な方法です。

于 2009-09-05T15:01:25.117 に答える