Typeを受け取り、その型で使用されているすべてのアセンブリのパスを返すメソッドが必要です。 私がこれを書いた:Typeで使用されているアセンブリのパスを取得する
public static IEnumerable<string> GetReferencesAssembliesPaths(this Type type)
{
yield return type.Assembly.Location;
foreach (AssemblyName assemblyName in type.Assembly.GetReferencedAssemblies())
{
yield return Assembly.Load(assemblyName).Location;
}
}
一般に、この方法は、仕事をするが、いくつかの欠点を持っている:
私は、型自体から参照されるアセンブリ/タイプを取得する方法が見つかりませんでした私はtype.Assembly.GetReferencedAssemblies()を使用し、型に関連するものだけでなく、アセンブリ全体の参照を取得しました。
type.Assembly.GetReferencedAssemblies()はAssemblyNameを返し、location/path/filepathプロパティはありません。 locationプロパティを取得するには、まずAssembly.Load()を使用してからlocationプロパティを使用しました。 Assembly.Load()はFileNotFoundExceptionまたはBadImageFormatExceptionで失敗する可能性があるため、アセンブリをロードする必要はありません。
すべての型はアセンブリに属します。つまり、type.Assembly.GetReferencedAssemblies()を実行できるだけです。ああ待って、あなたはすでにそれをやっている。とにかくこれは長い間解決されていると思いますよね? 2011年? –
@DxCKその問題に関する解決策はありますか?私の問題:マイライブラリプロジェクトはOracle.DataAccess 4.112.2.0を参照していますが、実行時にはGAC Oracle.DataAccess 4.121.1.0からロードされます。 Assembly.GetReferencedAssemblies()は、Oracle.DataAccess 4.112.2.0ではなく、Oracle.DataAccess 4.121.1.0を提供します。 – Kiquenet
使用するには、 'var results = this.GetType()。GetReferencesAssembliesPaths();'を呼び出します。 – Contango