Принудительное использование папки bin - PullRequest
2 голосов
/ 09 мая 2019

У меня есть более крупный проект ASP.NET Core, что означает, что в публикацию включено много библиотек DLL.

Поскольку все библиотеки DLL размещены в корневой папке, из-за большого количества файлов неудобно перемещаться по структуре папок (для управления конфигурациями и т. Д.).

Можно ли указать ASP.NET Core, что он должен загружать все сборки из другой папки (bin\)?

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Привет. Как насчет Managed Extensibility Framework , он позволяет загружать сборки динамически.

Используйте BuildManager для динамической загрузки сборок,

string pluginPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "plugins");
foreach (string f in Directory.GetDirectories(pluginPath))
{
    string binPath = Path.Combine(f, "bin");
    if (Directory.Exists(binPath))
    {
        foreach (String file in Directory.GetFiles(binPath, "*.dll"))
        {
            Assembly a = Assembly.LoadFrom(file);
            BuildManager.AddReferencedAssembly(a);
        }
    }

Разрешите сборки, используя приведенный ниже код,

protected virtual void Application_Start(object sender, EventArgs e)
{

    //...

    AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
}

System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    var currentAssemblies = AppDomain.CurrentDomain.GetAssemblies();

    foreach (var assembly in currentAssemblies)
    {
        if (assembly.FullName == args.Name || assembly.GetName().Name == args.Name)
        {
            return assembly;
        }
    }

    return null;
}
1 голос
/ 09 мая 2019

Я бы сделал это с противоположной стороны. Если ваша проблема - просто файлы конфигурации, переместите их в папку конфигурации и сохраните их там. На данный момент dotnet опубликует ваш проект + фреймворк (если вы используете автономный флаг).

Вы можете настроить aspnetcore для использования файлов

config.AddJsonFile("config/appsettings.json", optional: false, reloadOnChange: false);

Итак, эта папка будет сверху и станет более доступной

Да, в корневой папке все еще находится файл web.config, но в моем проекте этот файл обычно одинаков для всех сред. Но опять же, это зависит от того, где вы развертываете, потому что, если вы развертываете в среде, отличной от IIS, вам это даже не нужно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...