从外部文件夹加载asp.net dll

时间:2017-06-30 07:02:01

标签: c# asp.net iis

我在IIS上托管了50个SAME 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放在网站文件夹之外,以便可以共享它们。

1 个答案:

答案 0 :(得分:0)

您应该了解一些关于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文件夹是否有任何更改,并根据需要更新shadow目录。这使您可以在站点运行时部署新的DLL - 否则,它们将被锁定。

所以...无论你做什么,O / S都会加载同一个DLL的多个图像,即使你让它们都使用相同的bin文件夹。据我所知,没有办法解决这个问题。

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

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