gpt4 book ai didi

c# - COM Interop 和 .NET 3.5 的问题 - 调试和 Release模式下的不同行为

转载 作者:行者123 更新时间:2023-11-30 18:43:21 26 4
gpt4 key购买 nike

我们一直在解决以下问题,并正在寻找一些新的想法或攻击角度。

第一种情况:

我们有一个 ASP.NET Web 应用程序 - .NET 3.5,C#,针对 x86 构建 - 在 IIS7/Windows Server 2008 R2(64 位)上运行。 ASP.NET Web 应用程序在启用 32 位应用程序的默认应用程序池下运行。

此 Web 应用程序利用了一些用 VB6 编写并构建为 ActiveX DLL 的遗留组件。 DLL 使用 regsvr32 注册。对这些组件的引用已添加到 Web 应用程序项目 (Visual Studio 2008),我们正在使用生成的互操作类。

当 Web 应用程序以 Release模式构建时,每次调用这些遗留 VB6 组件时,子例程堆栈中相当深的遗留代码都会抛出错误。通常是这样的:

错误 91 对象变量或 With block 变量未设置 [ComponentName:ClassName.cls:MethodName]

当在 Debug模式下构建相同的 Web 应用程序代码时,会发生相同的错误,但它们是间歇性的。如果在 Web 应用程序中重复相同的操作 10 次(相同的输入,其他一切都相同),我们大约会发现一次问题。

第二种情况:

除了 Web 应用程序之外,我们还有一个针对 x86 构建的 .NET 3.5 C# 应用程序,它在 Windows Server 2008 R2(64 位)上作为 Windows 服务运行。此服务调用与网站使用的 DLL(常见的遗留继承和依赖项)相关的 ActiveX EXE。 ActiveX EXE 是使用/regserver 开关注册的,并将引用添加到 .NET 项目中。使用生成的互操作类。正如 ActiveX EXE 的本质一样,方法调用在它们自己的线程中异步执行,并使用事件来通知调用者完成。

如果 .NET 应用程序是在 Release模式下构建的,对 EXE 的方法调用不会引发错误(据我所知),但应该在 ActiveX EXE 中引发以指示成功的事件未被接收.NET 应用程序。

如果在 Debug模式下构建相同的 .NET 应用程序代码,则事件由 EXE 引发并由 .NET 应用程序接收/处理。

我将这些问题放在一起发布,因为它们都随着调试版本和发布版本而改变,我的直觉是原因是相关的。目前,我们关注的是垃圾收集的潜在问题和 ActiveX EXE 完成的进程外工作以及 Web 应用程序中的线程问题。欢迎就我们应该调查的领域提出任何想法。

最佳答案

关于c# - COM Interop 和 .NET 3.5 的问题 - 调试和 Release模式下的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4503120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com