2

仕事で共通ライブラリを作成し、テスト サーバーの GAC にインストールしました。最近更新したので、すべてのアプリケーションで更新を使用したいと考えています。発行者ポリシー アセンブリを作成し、更新プログラムと共に GAC にインストールしましたが、Web アプリが Leggett.Common, 1.0.0.0 を読み込むと、Leggett.Common, 1.1.0.0 にリダイレクトされません。

ネットワーク ドライブに共通のアセンブリ (実際には 5 つあるが、単純にしておく) があり、その隣に発行者ポリシー xml ファイルを作成し、al.exe を使用して同じフォルダーに発行者ポリシー アセンブリを作成しました。その後、更新されたアセンブリを GAC に配置し、発行元ポリシー アセンブリを GAC に配置しました。

共通アセンブリは「Leggett.Common.dll」、発行者ポリシー ファイルは「1.1.Leggett.Common.policy」、発行者ポリシー アセンブリは「policy.1.1.Leggett.Common.dll」です。

パブリッシャー ポリシー ファイルの XML は次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Leggett.Common"
                                  publicKeyToken="32cd8f1a53a4c744"
                                  culture="neutral" />
                <bindingRedirect oldVersion="1.0.0.0"
                                 newVersion="1.1.0.0"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

私は何を間違っていますか?

明確化
開発者はテスト サーバーにアクセスできないため、ローカルの開発マシンでこれをテストしています。

4

2 に答える 2

2

わかりました...刺し傷で...

1-アセンブリバインディングログビューア(Fuslogvw.exe)を使用して、どのアセンブリバインディングが実行されているかを確認しましたか?

あなたはそれを見つけることができます:

C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Bin \ FUSLOGVW.exe(VS2008がインストールされている場合)。

2-「ネットワークドライブに共通のアセンブリがあります(実際には5つありますが、簡単にしましょう)」-両方のアセンブリがネットワークドライブに常駐していますか?

更新:わかりました...新しいアセンブリがネットワークドライブ上にある場合は、おそらくいくつかの信頼の問題があります。新しいアセンブリをサーバーのローカルドライブに展開してから、GACに再インストールできますか?

Update2:私は知っています..愚かなもの....あなたは間違いなくpublicKeyTokenとバージョン番号を正しく持っていますか?つまり、新しいアセンブリのAssemblyVersion属性は間違いなく1.1.0.0であり、公開鍵トークンは(GACで)同一ですか?

文化的属性を削除してみましたか?

Update3:こんにちはマックス....使用した正確な発行元ポリシーファイルを貼り付けることができますか?また...1.0からより高いバージョンのアセンブリにリダイレクトする場合、パブリッシャーポリシー名は、リダイレクト元のアセンブリのmajor.minorバージョンを使用して名前を付ける必要があることに注意してください。したがって、あなたの場合、パブリッシャーポリシーは「policy.1.0.Leggett.Common.dll」という名前にする必要があります。「policy.1.1.Leggett.Common.dll」という名前が付けられていることに気付きました。これが機能していない理由である可能性があります。

最後に、1.0および1.1アセンブリで使用されているものと同じキーを使用して発行者ポリシーに署名する必要があります。

いくつかのDLLを作成し、それらをGACにドロップしてから、VSのコンソールアプリを使用してテストしましたが、機能します:)

Update4:こんにちはマックス、私が考えたことのない何か。パブリッシャーポリシーファイルを作成したときに、プラットフォームを指定しましたか?それを構築してみてください:

al /link:1.1.Leggett.Common.policy /out:policy.1.0.Leggett.Common.dll / keyfile:/version:1.0.0.0

/ platformスイッチを省略し、バージョン番号を明示的に指定します。

乾杯
ケブ

于 2008-10-08T22:57:10.247 に答える
2

あなたはアセンブリを正しく識別していますが、読んでいる他の人のために、ファイル拡張子を付けずにassemblyIdentity要素のルートでアセンブリを参照してください (たとえば、「Fubar.dll」ではなく「Fubar」)。

Microsoft のドキュメントでは、それについて言及することを怠っています... #$%#!(!@!

于 2008-11-20T22:52:54.993 に答える