72

(制御できない理由で) GAC にある必要がある .NET アセンブリがあります。ただし、同じアセンブリは、同じアセンブリの古いバージョンの独自のコピーを持つ別のプログラムによって使用されます。GAC にあるものではなく、独自のコピーを使用する必要があります。この場合、適切なバージョン管理は、おそらくその価値よりも手間がかかります。理由については触れません。私の質問は:とにかく.NETに伝えることはありますか:このディレクトリでこのDLLを使用するだけです-GACまたは他の場所で見つけたものはすべて無視してください

4

6 に答える 6

48

GAC アセンブリとローカル アセンブリのバージョン番号が異なることを確認してください (AssemblyInfo: [assembly: AssemblyVersion("1.0.0.*" )] )。次に、アプリの構成を使用してアセンブリ バインディングをリダイレクトします。

あなたの場合、assemblyBinding 構成の「appliesTo」属性は必要ありません。次のようなものが必要です:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="YourAssembly" publicKeyToken="AAAAAAAAAAAA" culture="neutral"/>
            <bindingRedirect oldVersion="0.0.0.0-5.2.1.0" newVersion="5.0.8.1"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>
于 2008-11-06T05:42:56.100 に答える
31

それらが同じバージョン番号を持っている場合、答えはできません。GAC されたアセンブリと同じ完全なアセンブリ名 (名前、バージョン、キー) を持つアセンブリを読み込もうとすると、CLR は毎回 GAC されたアセンブリを選択します。

于 2008-11-06T05:53:20.010 に答える
11

アセンブリを強制的にロードするように DEVPATH を設定できます。リンク テキストを参照してください。

これは開発での使用のみを目的としており、本番での使用を反映していないため、実際には推奨されていないため、質問には答えません。しかし、知っておくと良いので、とにかく共有すると思いました。

于 2009-06-24T11:32:49.437 に答える
2

同様の問題がありました。ildasmおよびを使用してターゲット dll の publicKeyToken を変更しilasm、新しい dll を生成しました。次に、プロジェクト参照で更新して、新しいdllを指すようにしました。私が行った手順はこちらです。

これは私にとってはうまくいきました。

于 2014-08-08T04:11:16.787 に答える
2

Assembly.LoadFromFile() を試しましたか? これは手動で行うことですが、必要になる前にアセンブリをメモリにロードする必要があります。.NET は、それを探すのではなく、メモリ内の 1 つを使用します。

もう 1 つの方法は、ローカル アセンブリが署名されていない場合に、そのように区別することです。

ロブ

于 2008-11-06T05:21:05.377 に答える