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;
}
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
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP