Как получить ссылку на сборку библиотеки классов в проекте .NET Core? - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть проект ASP.NET Core (netcoreapp2.0), который ссылается на модели в проекте библиотеки классов (netstandard2.0). Я пытаюсь использовать Mapster для отображения объектов, хранящихся в библиотеке классов. В документации для Mapster написано, что нужно вызывать метод Scan из Startup.cs, используя код:

TypeAdapterConfig.GlobalSettings.Scan(assembly1, assembly2, assemblyN)

У меня возникают проблемы с тем, как наилучшим образом получить ссылку на сборку для библиотеки классов для передачи в метод Scan. Я думаю, что это скорее общий вопрос .NET, а не специфический для Mapster. Лучшее, что я смог придумать, это следующее, но это неловко.

private Assembly GetAssemblyByName(string name)
{
    var assemblies = Assembly.GetEntryAssembly().GetReferencedAssemblies();
    var assemblyName = assemblies.FirstOrDefault(i => i.Name == name);
    var assembly = Assembly.Load(assemblyName);
    return assembly;
}

Есть ли лучший способ справиться с этим?

ОБНОВЛЕНИЕ: Очевидно, моё решение, приведенное выше, нарушает миграцию кода. Кто-нибудь может предложить способ сделать это?

1 Ответ

0 голосов
/ 25 апреля 2018

Получить сборку, используя определенный в ней тип.

var assembly = Assembly.GetAssembly(typeof(NameSpace.TypeName));

Обновление для адреса вашего комментария (но я не рекомендую это):

Используйте GetExecutingAssembly() вместо GetEntryAssembly(), и ваше решение в вопросе не сломается. Бонус: отфильтруйте результаты GetReferencedAssemblies() с чем-то вроде .Where(a => a.Name.StartsWith("CompanyName")), и вы даже можете избавиться от аргумента name.

Я не рекомендую это, потому что:

  1. в итоге мы будем жестко кодировать имя сборки (прямо или косвенно); Я бы предпочел использовать сильный тип вместо этого. Изменение ссылочной сборки должно нарушить вашу сборку.
  2. мы в конечном итоге платим штраф за производительность при запуске.
...