无法在ASP.NET应用程序中使用第三方DLL,但可以从Windows Forms .NET应用程序运行

问题描述:

我们有第三方应用程序,它以DLL的形式提供SDK,可用于开发自定义应用程序连接到他们的服务。该DLL位于第三方应用程序的目录以及其依赖的一堆其他DLL中。 SDK指南提供了通过Visual Studio创建测试应用程序的说明,并且它说要添加对Copy Local设置为False的SDK DLL的引用。我创建了一个测试Windows Forms .NET应用程序,并按照说明添加了对DLL的引用,并且一切正常。但是,在ASP.NET应用程序中引用该DLL会导致其中一个依赖的第三方DLL的FileNotFoundException异常。无法在ASP.NET应用程序中使用第三方DLL,但可以从Windows Forms .NET应用程序运行

作为一个实验,我尝试在我的项目中添加一个对违规DLL的引用,其中Copy Local设置为False,但得到了同样的错误。随着Copy Local设置为True它得到更多,但在另一个DLL上失败。无论Copy Local设置如何,添加对该DLL的引用都会失败。

我认为这些问题与“标准”.NET应用程序加载程序集与ASP.NET应用程序之间的差异有关,但我不太清楚应该如何解决此问题。

有没有正确的方法来引用第三方DLL(及其依赖人员)在ASP.NET应用程序中,而不将它们放入GAC或应用程序的bin目录中?

+0

有很多方法可能会出错,所以根据你的问题给出答案是不可能的。第三方DLL可能在C或C++中有依赖关系,或者它甚至可能不能用于ASP.NET。引用DLL的现代方法是使用NuGet(如果包可用),它通常会处理有关引用其自己的依赖关系的肮脏细节。 – NightOwl888

与在用户会话中运行且具有更多权限和资源的WinForms应用程序相比,IIS上的ASP.NET Web应用程序在有限资源的会话0中运行。

它们本质上是完全不同的环境,所以除非这样的库的供应商声称ASP.NET/IIS支持,否则应该简单地认为它不兼容,应该避免。

你应该注意到,即使是微软自己的技术(Office自动化,System.Drawing等)也只支持WinForms,而不支持ASP.NET。