【问题标题】:Force the usage of a bin folder强制使用 bin 文件夹
【发布时间】:2019-05-09 05:51:39
【问题描述】:

我有一个更大的 ASP.NET Core 项目,这意味着发布中包含很多 DLL。

由于所有 DLL 都放在根文件夹中,由于文件数量庞大,因此导航文件夹结构(管理配置等)很麻烦。

是否可以告诉 ASP.NET Core 它应该从另一个文件夹 (bin\) 加载所有程序集?

【问题讨论】:

  • 你解决了吗?
  • 还没有。我想移动 bin 文件夹而不必做太多配置。例如,Azure 中的“Kudu”抱怨 webroot 中的文件太多。

标签: asp.net-core asp.net-core-mvc


【解决方案1】:

我会在对面做。如果您的问题只是配置文件,则将它们重新定位到配置文件夹并保留在那里。截至目前,dotnet 将发布您的项目 + 框架(如果您使用自包含标志)。

你可以配置aspnetcore来使用文件

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

因此,该文件夹将位于顶部并且更易于访问

是的,在根文件夹中仍然有 web.config,但在我的项目中,该文件通常对于所有环境都是相同的。但这又取决于您的部署位置,因为如果您部署到非 IIS 环境,那么您甚至不需要它

【讨论】:

    【解决方案2】:

    您好,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;
    }
    

    【讨论】:

    • 但是如何让 msbuild 将所有程序集输出到 bin 文件夹?许多程序集来自间接引用 nuget 包。
    • 我认为您可以在 AfterBuild 目标中使用经典的复制任务。如果您不想复制,那么它应该是解决方案的一部分。否则使用源代码树中的链接。
    猜你喜欢
    • 2020-12-16
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 2012-09-10
    • 2012-05-10
    相关资源
    最近更新 更多