首页 > 解决方案 > 减少 IIS 上 MVC 框架 webapp、网站和控制台应用程序的磁盘占用空间

问题描述

我有一个解决方案,可以将 webapp、网站和控制台应用程序混合部署到 IIS。所有站点/应用程序共享一些公共项目,当我发布到每个站点的 bin 文件夹时,它们的程序集会被多次复制。

它可以工作,但出于托管成本的原因,我想减少 IIS 文件夹的占用空间。如何使用共享文件夹?我不想输出到文件夹,然后链接到 DLL(而不是链接到项目),我不想使用 GAC(我有 100 个或这些站点,我想保留所有依赖项他们自己的网站)。

标签: asp.netasp.net-mvciis

解决方案


来自微软文档

.NET Framework 为需要更好地控制程序集加载的应用程序提供 AppDomain.AssemblyResolve 事件。通过处理此事件,您的应用程序可以将程序集从正常探测路径之外加载到加载上下文中,选择要加载的几个程序集版本中的哪一个,发出动态程序集并返回它,等等。

这意味着您可以提供自己的实现来定位和加载程序集。在您的情况下,您可以将所有常见程序集放在一个共享文件夹中,并且该实现将使所有应用程序从那里加载程序集。

AppDomain.CurrentDomain.AssemblyResolve += CustomAssemblyResolve;

private Assembly CustomAssemblyResolve(object sender, ResolveEventArgs args)
{
   //Load assembly from shared folder

   //Example:
   return Assembly.LoadFrom($@"C:\commonassemblies\{filename}");
}

另一篇关于此问题的有用信息的文章:Loading .NET Assemblies out of Seperate Folders


推荐阅读