Мне нужен метод, который принимает тип и возвращает пути всех сборок, которые используются в типе. я писал:Получить пути сборок, используемых в типе
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.
Все типы принадлежат сборкам - вы должны иметь возможность просто сделать тип. 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