嵌入式非托管 DLL 无法在 ASP.NET 中加载

2024-03-11

我正在为 WCF 服务开发 ASP.NET 主机。该服务引用 C++/CLI 包装器库,该库本身引用非托管 DLL。基于这个问题 https://stackoverflow.com/questions/2907169/asp-net-load-unmanaged-dll-from-bin-folder我已将非托管 DLL 嵌入到 ASP.NET DLL 中。然后我像这样提取它:

string[] dlls = new [] { "myDLL.dll", "myDLLD.dll" };
Assembly assembly = Assembly.GetExecutingAssembly();
string location = Path.GetDirectoryName(assembly.Location);
Dictionary<string, Stream> streams =
    (from dll in dlls
    select new KeyValuePair<string, Stream>(
        dll, assembly.GetManifestResourceStream(typeof(Global), dll)))
    .ToDictionary(p => p.Key, p => p.Value);

foreach (KeyValuePair<string, Stream> stream in streams)
{
    using (FileStream file = new FileStream(Path.Combine(location, stream.Key),
                                            FileMode.Create))
    {
        stream.Value.CopyTo(file);
    }
}

我尝试过将此代码放入Application_Start() in Global.asax.cs and in AppInitialize() in the App_Code文件夹,但在这两种情况下,我都会出现黄屏死机,提示无法加载包装器 DLL 或其依赖项之一before在任一函数中都命中断点。我可以命中断点的唯一方法是将非托管 DLL 放置在系统路径中的某个位置(例如C:\Windows\system),但这显然违背了嵌入 DLL 的初衷。在 ASP 开始查找之前,如何获取 DLL 所需的位置?


显然 ASP.NET 的急切加载机制是问题所在。由于托管包装器已复制到输出目录,因此 ASP 找到了它并在启动时尝试链接到非托管 DLL,即使它还不存在。为了解决这个问题,我使用了/DELAYLOAD http://msdn.microsoft.com/en-us/library/yx9zd12s.aspxC++/CLI DLL 上的链接器选项和LoadLibrary() http://msdn.microsoft.com/en-us/library/windows/desktop/ms684175%28v=vs.85%29.aspxP/调用Application_Start()结合上面显示的嵌入式 DLL 提取。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式非托管 DLL 无法在 ASP.NET 中加载 的相关文章

  • 同一服务器上的多个.NET版本

    所以我一直都知道在一台计算机 客户端或服务器 上运行多个版本的 NET 框架是可以的 这个问题 https stackoverflow com questions 407306 running many versions of net on
  • 如何从 Web API 应用程序返回 PDF

    我有一个在服务器上运行的 Web API 项目 它应该从两种不同类型的源返回 PDF 实际的可移植文档文件 PDF 和存储在数据库中的 base64 字符串 我遇到的问题是将文档发送回客户端 MVC 应用程序 剩下的部分是关于所发生的一切以
  • 表单身份验证 web.config 设置

    根 web config 文件中的此规范是否正确 我没有在受保护的文件夹中使用子 web config
  • 将数组从 jquery ajax 传递到代码后面

    我必须将二维数组传递给在asp net网页代码后面编写的页面方法我有一个变量objList作为二维数组 我使用以下代码来实现此目的 但没有成功 并且未调用页面方法 脚本语言 function BindTable objList ajax u
  • 锚标记 href 中的 eval

    我想要实现的目标是在锚标记的 href 中使用 Eval 作为参数 锚点嵌套在转发器内 为什么我不能使用后面的代码来实现这一点 我尝试了一些事情但没有运气 a href http MyWebsite ActiveUsers ID Inser
  • 如何终止会话或会话 ID (ASP.NET/C#)

    当用户单击注销按钮时 如何销毁会话 会话 名称 我正在 MSDN 上查看 ASP NET API Reference 它似乎没有太多信息 看来还是比较有限的 但我找不到 ASP NET 类等的任何其他页面 我努力了 Session Aban
  • 混合 MFC 和 WPF:模态对话框

    我使用 C CLI 界面层将 C WPF 对话框添加到现有的 C MFC 应用程序 我一切正常 只是我遇到了形式问题 例如 MFC 应用程序使用 ShowDialog 显示 WPF 对话框 按预期工作 该 WPF 对话框显示使用 DoMod
  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • 尝试对无法访问的主机进行套接字操作

    一位客户在连接到我们的服务器服务的 WCF 客户端上报告了此错误 消息 尝试对无法访问的主机进行套接字操作 类型 System Net Sockets SocketException 从这个链接http msdn microsoft com
  • JQuery Mobile 与 MVC 的链接

    我正在使用 ASP NET MVC 3 和 Razor UI 设置 JQuery 移动网站 我正在生成我的链接 例如 a href See Group 2 a 假设我从 Home Index 访问它 我遇到的问题是 当我点击链接时 它会出现
  • 参考装配错误

    我已经实现了 RoleProvider 类 在那里我创建了位于另一个程序集中的 Domain 类对象 我的程序集具有对该程序集的引用 错误 3 类型 System Data Entity DbContext 是在 未引用的程序集 您必须添加
  • 加载 DLL 及其依赖项

    如何加载 dll 及其依赖项 我不想将每个依赖的 dll 都放在 Assembly Load 中 我宁愿只加载一个 dll 然后加载依赖项 当我的应用程序启动时 上面的 dll 不会被加载 它们仅在用户执行特定操作时加载 然后冻结 gui
  • 无法加载文件或程序集“System.Data.SqlServerCe,版本=4.0.0.0”

    我在我的 C 代码中使用 Visual Studio 2012 Ultimate 和 SQL Server Compact 4 0 本地数据库 创建了一个 ASP NET 网站 不是 Web 应用程序 我能够成功编译网站并将其发布到另一个使
  • global.asax 范围和生命周期澄清

    我需要在我当前正在进行的项目中实现多个应用程序级行为 有几件事我需要弄清楚 1 在哪里以及如何定义应用程序级变量 2 这些变量的生命周期是多长 或者更准确地说 在什么情况下它们会被丢弃 应用程序池回收 应用程序二进制文件从内存中删除并在下一
  • 从 javascript 调用 HttpHandler

    我有一个简单的页面 带有通过 JavaScript 调用 HttpHandler 的按钮 HttpHandler 获取大量文件并将它们添加到 zip 文件中 完成工作后 zip 文件将添加到 Response 中 此操作可能需要几分钟时间
  • 编写一个加载 msvcr80.dll 并公开 free() 函数的 DLL

    我有一个依赖于 MSVCR80 的第三方 DLL 并分配我需要清理的资源 图书馆有not暴露一个free 执行此操作的函数 相反 我需要加载相同的运行时库并手动调用free功能 作为一种解决方法 我尝试编写一个 包装器 DLL 它加载正确的
  • 从asp.net ListBox中获取所有选定的项目

    任何人都知道一个顺利的方法来获得所有selected使用扩展方法在列表框控件中的项目 并且 请不要让我争论与如何获取这样一个列表无关 因为最终一切都使用循环来迭代项目并找到选定的项目 var selected yourListBox Ite
  • ASP.NET MVC:我什么时候应该创建自定义视图引擎

    我知道什么View Engine是 我更喜欢使用Razor视图引擎只是因为它的语法简单ASPX引擎 内置视图引擎为您执行几乎所有任务 那么在什么情况下我应该创建自己的视图引擎 我用谷歌搜索了它 但得到了如何创建它的答案 而不是何时以及为什么
  • 如何将 .ashx 处理程序与 asp:Image 对象一起使用?

    我有一个 ashx 处理程序 using System using System Web public class Thumbnail IHttpHandler public void ProcessRequest HttpContext
  • 如何让浏览器后退按钮通过 AJAX 调用带您返回?

    我有一个页面 上面有很多动态生成的复选框 当用户单击这些复选框时 页面上的许多内容会通过 ajax 动态更改 最终用户抱怨 在点击提交然后点击后退按钮更改某些内容后 他们的选择被破坏了 他们必须重新做一遍 我见过一些网站 gmail fac

随机推荐

  • 误报选项不会出现在项目中

    我在 Ubuntu 12 01 机器上使用 Sonarqube 我使用 Sonar Runner 和 Jenkins 插件来分析我的代码 当我对新项目进行分析时 问题就出现了 例如 我已经保存了 Sonar A 和 B 项目 如果我对该项目
  • 理解 Dymola 错误消息时遇到问题

    谁能告诉我 代数环 的含义 以及我应该如何通过添加 预 运算符来应对这种情况 我真的没看懂 Error Failed to generate code for an algebraic loop involving when equatio
  • 如何动态计算HTML页面表格中每一列的总计?

    我基本上会有一个表格 其中包含一周中的几天 标题行交叉 第 1 栏 周日 第 2 栏 周一等 每个单元格将输入工作时间 即8 最后一行 我希望每个单元格在将数据输入到每个单元格后动态计算其列中其上方单元格的总数 理想情况下 应在将光标移动到
  • 每个外键都有索引?

    每个外键上的索引是否都会优化查询 通常 在外键上放置索引被认为是良好的做法 这样做是因为在将 FK 表链接到包含键定义的表时 它有助于提高联接性能 这不会神奇地使您的整个查询得到优化 但它肯定有助于提高 FK 与其主键对应部分之间的连接性能
  • 如何检测 GHC 默认生成 32 位还是 64 位代码?

    我的里面有以下内容makefile https github com bsl GLFW b blob master Makefile GLFW FLAG m32 O2 Iglfw include Iglfw lib Iglfw lib co
  • jwt 令牌过期后如何注销

    我正在开发一个网络应用程序 使用node js and vue js 我正在使用进行身份验证和维护会话jwt and passport js using passport jwtstrategy 我已经完成了从创建 jwt 到保护路由的所有
  • 如何在 Python 中对编辑距离超过 80% 的单词进行分组

    假设我有一个清单 person name zakesh oldman LLC bikash goldman LLC zikash rakesh 我正在尝试以这种方式对列表进行分组 以便编辑距离 https en wikipedia org
  • 在远程计算机上运行命令

    我想使用 C 在远程计算机上的命令提示符中运行命令 根据此链接如何在远程计算机上执行命令 https stackoverflow com questions 428276 how to execute a command in a remo
  • 我需要调用[super viewDidUnload]吗?

    我见过一些Apple调用的例子 super viewDidUnload 也有一些没有 我读过一篇文章 几个月前所以我不记得网址 说打电话 super viewDidUnload 是不必要的 但除此之外没有解释 是否有明确的理由为什么或为什么
  • 分段错误 p_thread 可能存在竞争条件

    问题 我创建了子线程 TIDS 的链接列表 并希望在继续主线程之前等待所有子线程 TIDS 完成执行 基本上我有目录遍历 目录由给定的成员指定struct 每次我看到一个目录或文件时 我都会创建一个新线程并将其放入threadID进入链表
  • 通过逻辑索引为数组赋值不起作用

    在Matlab中 我想用其他值替换某个值 我知道我可以这样做 X X 0 1 如果我想将所有出现的 0 替换为 1 我有一个数组 X 其中包含范围在 0 到 9 之间的数字 我想创建一个新数组 Y 其中如果 X i 某个给定数字 例如 5
  • 将列表附加到 R 中的列表列表

    我在将数据附加到已经采用列表格式的列表时遇到问题 我有一个程序 它将在模拟循环期间导出结果对象 数据本身存储为矩阵列表 我的想法是将这些列表存储在一个列表中 然后将此列表列表保存为 R 对象以供以后分析 但是我在正确实现这一点时遇到了一些问
  • 如何在 git checkout 中使用八进制字符?

    我有一个音乐文件的 git 存储库 最近我发现有些文件被删除了 我想我不小心删除了它们 但现在我只是短暂地陶醉于我有先见之明的事实 使用 git 存储库 因此我当前的 git 状态验证它们已被删除 以下是一些清单 deleted Steve
  • 在 ASP .NET (SMTP) 中发送邮件

    我在代码文件中编写了以下代码 但它不起作用 请帮助我 protected void Button1 Click object sender EventArgs e MailMessage msgeme new MailMessage ema
  • VBA:复制时前面的零被删除

    我正在使用 VBA 创建 Excel 文件的副本 在该文件中 有一列包含前面带有零的数字 该文件的副本已创建 但该列中的数据将被删除 我需要保留前面带有零的值 我该如何用VBA解决这个问题 最好的方法是通过将 Range NumberFor
  • 带有泛型的映射数组的问题[重复]

    这个问题在这里已经有答案了 可能的重复 Java 泛型和数组初始化 https stackoverflow com questions 470198 java generics and array initialization 如何在 Ja
  • 代码在 g++ 中运行完美,但在 Xcode 中则不然 - 找不到文件

    我创建了一个包含内容的文本文件 它与 cpp 文件位于同一文件夹中 而且我已经多次确认该文件存在 当我运行 g 时 编译并运行它会找到该文件 当我在 Xcode 中运行它时 它不起作用 如果找不到该文件 include
  • int 和 NSInteger 有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 何时使用 NSInteger 与 int https stackoverflow com questions 4445173 when to use nsinteger vs int 为什么会有 NS
  • 检查 .lib 文件的工具?

    我正在评估一些文档不足的软件 当我构建示例项目时 我收到一个链接器错误 如下所示 error LNK2019 unresolved external symbol 这个应用程序没有大量的 lib 文件 因此我可以通过反复试验来解决这个问题
  • 嵌入式非托管 DLL 无法在 ASP.NET 中加载

    我正在为 WCF 服务开发 ASP NET 主机 该服务引用 C CLI 包装器库 该库本身引用非托管 DLL 基于这个问题 https stackoverflow com questions 2907169 asp net load un