【问题标题】:Load asp.net dlls from external folder从外部文件夹加载 asp.net dll
【发布时间】:2017-12-04 01:28:37
【问题描述】:

我在 IIS 上托管了 50 个相同的 asp.net 网站。像 WordPress 之类的东西,虽然每个网站都有不同的内容。

C:\inetpub\vhosts\website1.com    
C:\inetpub\vhosts\website2.com
C:\inetpub\vhosts\website3.com
.    
.    
.    
C:\inetpub\vhosts\website50.com

因为这些是 ASP.NET 网站的完全相同的副本;我想使用一个“通用”bin 文件夹,这样我就不会每次都加载同一组 DLL 的 50 个副本来更新和加载到内存中。

这里的解决方案:Is there a way to change .net mvc bin dir location? 不工作,因为我希望将 DLL 放在网站文件夹之外,以便可以共享它们。

【问题讨论】:

    标签: c# asp.net iis


    【解决方案1】:

    关于 IIS 和 ASP.NET 的一些小细节; they do not actually run the files in the bin folder。相反,他们将 bin 文件夹中的文件复制到“影子目录”(类似于“C:\WINDOWS\Microsoft.NET\Framework\v4.5.XXXX\Temporary ASP.NET Files”)。它们实际上是从那里被执行的。监视 bin 文件夹的任何更改,并根据需要更新影子目录。即使站点正在运行,这也允许您部署新的 DLL,否则它们会被锁定。

    所以...无论你做什么,操作系统都会加载同一个 DLL 的多个图像,即使你让它们都使用同一个 bin 文件夹。据我所知,没有办法关闭它。

    话虽如此,如果您想节省一点磁盘空间并让您的网站使用公共 bin 文件夹,请考虑使用symbolic link。这实质上允许您创建一个“指向”另一个目录的目录(这种事情在 Unix 中更常见)。因此,您最终会从多个地方访问一个副本。请注意一句话:删除内容时要非常小心,因为您可能会无意中删除所有 50 个站点中的文件夹。

    但更好的选择(取决于您运行 50 个相同站点的原因,这是非常不寻常的)是只运行一个站点,使用一个 IP 地址,但有多个指向该 IP 的 DNS 条目。这样一来,当您只有一个站点时,您看起来就像拥有 50 个站点。这里的诀窍是(如果您使用的是 https)您必须use host headers to pick the SSL cert 以便浏览器不会显示网络钓鱼警告。或者,如果您的站点是负载平衡的,您可以在负载平衡器上终止 SSL(一种称为 SSL offloading 的策略),这样甚至不需要 IIS 级别的证书。

    【讨论】:

      猜你喜欢
      • 2011-02-23
      • 2022-10-07
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多