【问题标题】:Unable to use a 3rd party DLL in an ASP.NET application, but works from a Windows Forms .NET application无法在 ASP.NET 应用程序中使用第 3 方 DLL,但可以在 Windows Forms .NET 应用程序中使用
【发布时间】:2017-10-07 18:44:28
【问题描述】:

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

作为一个实验,我尝试将有问题的 DLL 的引用添加到我的项目中,并将 Copy Local 设置为 False,但得到了同样的错误。将Copy Local 设置为True 会更进一步,但随后在另一个 DLL 上失败。无论Copy Local 设置如何,添加对该DLL 的引用都会失败。

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

是否有适当的方法来引用 ASP.NET 应用程序中的第 3 方 DLL(及其依赖项)而不将它们放在 GAC 或应用程序的 bin 目录中?

【问题讨论】:

  • 有很多方法可能会出错,因此无法根据您的问题给您答案。第 3 方 DLL 可能在 C 或 C++ 中具有依赖关系,或者它甚至可能不适合在 ASP.NET 上工作。引用 DLL 的现代方法是使用 NuGet(如果包可用),它通常会处理有关引用其自身依赖项的脏细节。

标签: c# asp.net .net dll .net-assembly


【解决方案1】:

IIS 上的 ASP.NET Web 应用程序在会话 0 中运行,资源有限,而 WinForms 应用程序在用户会话中运行,权限和资源要多得多。

它们本质上是完全不同的环境,因此除非此类库的供应商声称支持 ASP.NET/IIS,否则您应该简单地假设它不兼容,应该避免使用。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多