3

問題があり、これまで解決できませんでした。

フォルダからプラグイン (.dll アセンブリ) をロードするアセンブリ (実行可能な .net 4.0) があります。メインの実行可能ファイルには telerik.windows.controls.dll への参照があり、すべて正常に実行されます。

今、新しいバージョンの telerik ライブラリを使用する新しいプラグインを作成し、より具体的にアセンブリ telerik.windows.controls.GanttView を作成します。問題は、GanttView コントロールが telerik.windows.controls.dll の新しいバージョンを使用しているため、プラグインが telerik 参照アセンブリを読み込めないためにクラッシュしたことです。

すべてを参照アセンブリ (telerik) の最新セットにアップグレードすることでこれを解決できることはわかっていますが、これらのコントロールは私のチームによって QA/テストされていないため、新しいバグが導入されていません。

要約すると、次のようになります。

main.exe -> a.dll -> X.dll (v1)

次に、b.dll という新しいプラグインを追加します。

main.exe ->b.dll -> X.dll (v2) +------------> X.dll (v1)

したがって、問題は、メインアセンブリによってロードされたものをロードするようになったため、私のプラグインが別のバージョンのアセンブリ (および参照されているアセンブリも) を別の場所から参照できるかどうかです。

ありがとう。

4

2 に答える 2

1

新しいdllに同じアセンブリ情報がある場合、簡単な答えはノーです。

より長い答えは、アプリケーション ドメイン (自分で作成しない限り、複数のアプリケーション ドメインはありません) では、特定のアセンブリを 1 回しか読み込むことができないということです。繰り返しになりますが、これは、話しているアセンブリ (dll) に同じアセンブリ情報があることを前提としています。新しいアセンブリを読み込む場合は、別のアプリケーション ドメインを作成する必要があります。ただし、他のコントロールが「生きている」最初のアプリケーション ドメインでは使用できません。

于 2012-08-22T17:12:18.077 に答える
1

アプリのある時点でこれを達成しました。私たちが行った方法は、古いdllを保持するbinディレクトリ内にフォルダーを作成し、古いdllを参照していたapp.configファイルに次の行を追加することでした...

<runtime>
    <assemblyBinding xmlns = "urn:schema-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity 
                name = "YourAssembly"
                />
            <codeBase version="YourAssemblyVersion" href = "FolderWithinBinDirectory/YourAssembly.dll"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>

他にもあったかもしれませんが、私たちがしなければならなかったのはそれだけだと思います。

于 2012-08-22T17:17:25.947 に答える