asp.net - 减少 IIS 上 MVC 框架 webapp、网站和控制台应用程序的磁盘占用空间
问题描述
我有一个解决方案,可以将 webapp、网站和控制台应用程序混合部署到 IIS。所有站点/应用程序共享一些公共项目,当我发布到每个站点的 bin 文件夹时,它们的程序集会被多次复制。
它可以工作,但出于托管成本的原因,我想减少 IIS 文件夹的占用空间。如何使用共享文件夹?我不想输出到文件夹,然后链接到 DLL(而不是链接到项目),我不想使用 GAC(我有 100 个或这些站点,我想保留所有依赖项他们自己的网站)。
解决方案
来自微软文档:
.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
推荐阅读
- python - 使用 pandas str.match 转义缺少的括号
- selenium - 在 Firefox 浏览器上获取 ElementClickIntercepted 异常,因为弹出窗口正在干扰(chrome 工作正常)
- javascript - 猫鼬将所有倾斜的 ObjectIds 转换为字符串格式
- c# - Coap 服务器未经授权的访问 C#
- c# - 生成素数序列,Loop Break vs LINQ TakeWhile
- security - 未经授权的设备登录了我的 Google 帐户。接下来我该怎么办?
- c# - 使用附加参数在 SqlCommand 中传递数组参数
- angular - 角度材料选项卡 - 悬停时更改选项卡
- excel - 使用 IIS 应用程序池将 Excel 导入 SQL 的问题
- python - 将低级列与熊猫中每一行的列表相乘