Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET应用程序和控制台应用程序是否可以使用同一类库DLL工作?_Asp.net_.net_Dll - Fatal编程技术网

ASP.NET应用程序和控制台应用程序是否可以使用同一类库DLL工作?

ASP.NET应用程序和控制台应用程序是否可以使用同一类库DLL工作?,asp.net,.net,dll,Asp.net,.net,Dll,我的ASP.NET 4.5应用程序引用了类库项目。所有DLL都位于正常位置-网站的BIN文件夹中。我想创建一个引用同一类库项目的控制台应用程序。很明显,我可以在网站外的单独文件夹中部署该控制台应用程序。但我很好奇是否也可以将控制台应用程序EXE放在网站BIN文件夹中,并使ASP.NET网站和控制台应用程序在同一物理文件夹中运行相同的DLL? 我知道控制台应用程序和网站将在不同的应用程序域中运行,因此不会有任何共享的静态变量等,这是可以的。我不确定两个独立的应用程序/应用程序域是否可以安全地引用相

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

我知道控制台应用程序和网站将在不同的应用程序域中运行,因此不会有任何共享的静态变量等,这是可以的。我不确定两个独立的应用程序/应用程序域是否可以安全地引用相同的物理DLL。例如,如果网站进程锁定了阻止console应用程序使用的DLL,则可能会由于锁定而产生错误,反之亦然。或者其他类似的情况,让这两个应用程序同时访问同一个DLL可能是不明智的

也可以将控制台应用程序EXE放入网站BIN文件夹,并使ASP.NET网站和控制台应用程序在同一物理文件夹中运行相同的DLL

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

例如,如果网站进程锁定了阻止console应用程序使用的DLL,则可能会由于锁定而产生错误,反之亦然

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

另一方面,运行console应用程序会干扰网站的部署(当console应用程序运行时,您无法执行任何web部署,除非它们仅为标记),因此存在这样的问题

也可以将控制台应用程序EXE放入网站BIN文件夹,并使ASP.NET网站和控制台应用程序在同一物理文件夹中运行相同的DLL

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

例如,如果网站进程锁定了阻止console应用程序使用的DLL,则可能会由于锁定而产生错误,反之亦然

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


另一方面,运行console应用程序会干扰网站的部署(在console应用程序运行时,您无法执行任何web部署,除非它们仅为标记),因此存在这种情况。

您应该将它们保留为两个独立的项目,并引用从属项目中所需的DLL**将它们放在一个项目中是一种不好的做法,我敢打赌您会导致一些奇怪的tfs问题。您应该将它们放在两个单独的项目中,并引用依赖项目中所需的DLL**把它们放在一个里面是不好的做法,我打赌你会引起一些奇怪的tfs问题。有用的反馈,谢谢John。我想你是对的,也许最好避免。我主要是试图避免额外的部署(将相同的类库DLL重新部署到两个位置)。自动化部署应该可以解决这个问题。如果console应用程序正在运行,则无法更新网站,您的最后一点非常正确。非常有用的反馈,谢谢John。我想你是对的,也许最好避免。我主要是试图避免额外的部署(将相同的类库DLL重新部署到两个位置)。自动化部署应该可以解决这个问题。如果console应用程序正在运行,您的最后一点是关于无法更新网站的。