2012-01-10 9 views
0

C#コンソールプロジェクトへの参照として、特定のバージョンのDLLを複数のDLLに対してFalseに設定しました。私はこれがコンパイル時のチェックだと思います。リファレンスDLL - 実行時に以前のバージョンを許可する

したがって、実行時に以前のバージョンのDLLを許可するにはどうすればよいですか?

ありがとうございます! MSDN - Assembly Versioningから

+0

[AssemblyVersion]の数字は、チームがどれほどうまく連携しているかを深く把握しています。メジャーバージョン番号が3以上になったり、ランダムなビルド番号やリビジョン番号があると、バージョン番号で解決できない通信上の問題が発生します。 –

答えて

5

ランタイムは、バージョン管理の目的で定期的かつ厳密な名前付きアセンブリを区別します。バージョンチェックは、厳密な名前のアセンブリでのみ発生します。

あなたはを行う場合は、それへの参照をリダイレクトすることができ、厳密な名前のアセンブリを持っています。 MSDN - Redirecting Assembly Versionsを参照してください。

あなたの場合、AppDomain.AssemblyResolveを使用できます。次に例を示します。

AppDomain.CurrentDomain.AssemblyResolve += (sender, eventArgs) => 
{ 
    var fullName = new AssemblyName(eventArgs.Name); 
    // should check that the assembly is the one we support old versions for 

    var wantedDLL = fullName.Name + ".dll"; 

    // locate the DLL here... your path will vary 
    var found = Assembly.LoadFile(Path.Combine(Environment.CurrentDirectory, wantedDLL)); 
    return found; 
}; 

代わりにあなたが正確な古いバージョン番号を知っていれば、あなたはAssembly.Load(AssemblyName)過負荷でそれを読み込むことができます。

var fullName = new AssemblyName(eventArgs.Name) 
       { 
        Version = new Version(1, 0, 0, 0) 
       }; 
return Assembly.Load(fullName); 

ここではエラーに注意してください。例外をスローすると奇妙な動作が発生し、アセンブリのロードに失敗した場合、メソッドは無限に繰り返され、StackOverflowExceptionになります。

+0

私はリダイレクトを試みましたが、それは私が探しているように動作していないようです。 IDは7.1.100から7.0.150にリダイレクトする必要がありますが、7.1.100しかない他のマシンはどうでしょうか?以前のバージョンを動作させたいだけです。 – user1141921

+0

ああ、私は参照してください。その場合、唯一できることは 'AssemblyResolve'を使って手動で見つけることだと思います。私は例を追加します。 – porges

+0

ありがとうございます - 私はこれを撃つでしょう! – user1141921

関連する問題