TransWikia.com

Как загрузить из одной сборки другую сборку

Stack Overflow на русском Asked by Oleg_Ba on December 26, 2021

Есть такой код получения типа из сборки.
Как мне загружать код через Assembly.Load() не прописывая полного пути, я когда пытаюсь так сделать прилетает ошибка следующего типа

System.IO.FileNotFoundException: ‘Could not load file or assembly ‘TextListener, Culture=neutral, PublicKeyToken=null’. The system cannot find the file specified.’

public static IListener CreateListenerFromAssembly(string listenerName)
{
    var assembly =
        Assembly.LoadFrom(
        $@"D:NET02.3{listenerName}binDebugnetcoreapp3.1{listenerName}");
    var type = assembly.GetTypes()
        .FirstOrDefault(type => typeof(IListener).IsAssignableFrom(type) && type.IsClass);

    if (string.IsNullOrEmpty(type.FullName))
    { 
        throw new NullReferenceException("Can't find this listener");
    }

    var listener = assembly.CreateInstance(type.FullName);

    return (IListener) listener;
}

One Answer

Assembly.Load в .NET Core по умолчанию не грузит библиотеки из каталога с программой. Чтобы включить эту возможность нужно установить параметр Microsoft.NETCore.DotNetHostPolicy.SetAppPaths в runtimeconfig.json:

{
  "runtimeOptions": {
    "tfm": "netcoreapp2.1",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "2.1.0"
    },
    "configProperties": {
      "System.GC.Server": true,
      "Microsoft.NETCore.DotNetHostPolicy.SetAppPaths": true
    }
  }
}

Кроме того, если текущий каталог совпадает с каталогом программы, можно загрузить сборку без прописывания полного пути так:

Assembly.LoadFrom("Assembly.dll");

В общем случае, для загрузки сборки из каталога программы можно использовать вот такой код:

Assembly.LoadFrom(
    Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location),"Assembly.dll")
    );

Answered by MSDN.WhiteKnight on December 26, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP