我有一个较大的ASP.NET Core项目,这意味着发布中包含了许多DLL。
由于所有DLL都放置在根文件夹中,因此由于文件数量过多,导航文件夹结构(管理配置等)很麻烦。
是否可以告诉ASP.NET Core它应该从另一个文件夹(bin\
)加载所有程序集?
答案 0 :(得分:1)
我会在另一侧做。如果您的问题只是配置文件,则将它们重新放置到config文件夹中,并将其保存在该位置。截至目前,dotnet将发布您的项目+框架(如果您使用自包含标志)。
您可以将aspnetcore配置为使用文件
config.AddJsonFile("config/appsettings.json", optional: false, reloadOnChange: false);
因此该文件夹将位于顶部,并且更易于访问
是的,在根文件夹中仍然存在web.config,但是在我的项目中,该文件通常对于所有环境都是相同的。但这又取决于您在哪里部署,因为如果您部署到非IIS环境,则甚至不需要它
答案 1 :(得分:1)
嗨,托管扩展框架怎么样,它允许您动态加载程序集。
使用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;
}