【问题标题】:Can an ASP.NET app and Console app work off of the same class library DLLs?ASP.NET 应用程序和控制台应用程序可以使用相同的类库 DLL 吗?
【发布时间】:2016-09-26 04:17:01
【问题描述】:

我的 ASP.NET 4.5 应用程序引用了一个类库项目。所有 DLL 都在正常位置 - 网站的 BIN 文件夹。我想创建一个引用相同类库项目的控制台应用程序。我显然可以将该控制台应用程序部署在网站外部的单独文件夹中。但我很好奇 是否也可以将控制台应用程序 EXE 放在网站 BIN 文件夹中,并让 ASP.NET 网站和控制台应用程序在同一个物理文件夹中使用相同的 DLL 运行?强>

我知道控制台应用程序和网站将在不同的应用程序域中运行,因此不会有任何共享的静态变量等,这没关系。我不确定两个单独的应用程序/应用程序域是否可以安全地引用相同的物理 DLL。例如,可能会由于锁定网站进程锁定 DLL 以防止控制台应用程序使用它而出现错误,反之亦然。或者像这样的任何其他情况,可能不建议让这 2 个应用程序同时访问同一个 DLL。

【问题讨论】:

  • 您应该将它们保留为两个独立的项目,并在依赖项目中引用您需要的 dll。 ** 将它们放在一起是不好的做法,我敢打赌你会导致一些奇怪的 tfs 问题。

标签: asp.net .net dll


【解决方案1】:

也可以将 Console App EXE 放在网站 BIN 文件夹中,让 ASP.NET 网站和 Console App 在同一个物理文件夹中使用相同的 DLL 运行?

你可能可以做到,但我不会。共享程序集二进制文件通常根本没有任何问题(毕竟,GAC 中的所有程序集都是共享的)。我唯一可能会犹豫的是,您将拥有一个应用程序域用户,该用户对该 Bin 文件夹以及该控制台应用程序具有执行访问权限。可能不是最大的。可能还有其他问题,我不确定——老实说,我从未见过有人故意设置这样的东西。典型的过程是为每个应用程序创建一个单独的文件夹,并将所有共享的 DLL 放入 GAC。

或者例如,由于锁定网站进程锁定 DLL 阻止控制台应用程序使用它,或者反之亦然,可能会出现错误。

你在这里很安全。您的网站实际上并没有使用 bin 文件夹中的 DLL。虽然它确实监视 bin 文件夹的任何更改,但 bin 中的所有文件都是 copied to a temporary folder 并在那里执行(确切的文件夹是 %SystemRoot%\Microsoft.NET\Framework\versionNumber\Temporary ASP.NET Files)。这种临时缓存机制允许您使用 xcopy deployment 部署 ASP.NET 站点,而不会关闭站点。

另一方面,运行您的控制台应用程序会干扰您网站的部署(您无法在控制台应用程序运行时执行任何网络部署,除非它们只是标记) ,所以就是这样。

【讨论】:

  • 有用的反馈,谢谢约翰。我想你是对的,最好避免。我主要是想避免额外的部署(将相同的类库 DLL 重新部署到 2 个位置)。自动化部署应该可以解决这个问题。如果控制台应用程序正在运行,您的最后一点非常有效,即无法更新网站。
猜你喜欢
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
相关资源
最近更新 更多