你能从ASP.NET 1.1的Web应用程序中调用一个.NET 2.0的COM对象吗?

5
我们有一个ASP.NET 1.1 Web应用程序。它调用一个C++ COM对象,该对象又调用一个.NET COM对象。最初,这个.NET COM对象是一个.NET 1.1程序集。现在,我们需要修改这个.NET COM对象,并且在此过程中,我们现在使用Visual Studio 2008,因此它现在是一个.NET 2.0 COM对象。我们现在发现我们的ASP.NET 1.1 Web应用程序仍然可以调用C++ COM对象,但是C++ COM对象无法在新的.NET 2.0 COM对象上调用CoCreateInstance()。当我们配置Web应用程序使用.NET 2.0 Framework时,C++ COM对象可以调用.NET 2.0 COM对象,但这样做会破坏Web应用程序。
目前,我计划使用Visual Studio .NET 2003重新构建.NET COM对象,以便我可以使它成为.NET 1.1程序集。但如果可能的话,我不想这样做。我知道我们也应该将我们的Web应用程序升级到.NET 2.0,但这需要更长的时间。
那么,有没有办法让我们的ASP.NET 1.1 Web应用程序通过C++ COM对象能够调用.NET 2.0 COM对象?
感谢任何建议。
-Dave Herrmann

1
无法将.NET 1.1应用程序升级到.NET 2.0?.NET 2.0中很少有东西会破坏.NET 1.1应用程序。 - John Saunders
3个回答

1

如果在进程中运行它,就不会出现这种情况。.Net v1.1和v2.0运行时无法共存于同一进程中。先加载哪个版本,就使用哪个版本。

但是,您应该能够在单独的进程中通过COM+激活上下文来运行它。这可能是您情况的一个便捷解决方案。


是的,这就是我正在找到的。我的.NET 2.0 COM程序集是一个进程内COM对象,因为它作为IIS的一部分运行。所以,我认为我的唯一解决方案是重新安装旧的Visual Studio .NET 2003开发环境,并在那里使用.NET 1.1重建我的程序集。感谢回复。 -Dave Herrmann - Dave Herrmann
你可以在单独的进程中运行内部 COM 对象,并让 COM+ 基础设施为你进行调用的封送。这只是一个简单的配置问题。你可以先尝试一下这个方法... - codekaizen

0
快速建议 - 这可能不会使任何事情变得更容易...但是有一种可能的方法可以解决这个问题,为什么不为.NET 1.1和.NET 2.0应用程序之间的IPC通信创建一个内存映射,例如,C++ COM创建一个内存映射以进行读/写操作,.NET 1.1对象打开内存映射,写入一些数据,C++ COM对象读取它并将调用委托给.NET 2 COM对象...并通过内存映射返回数据...如果我不能给你比这更好的建议,对不起...你是否受到时间和精力的限制?
1.1 .NET -> C++ COM -> .NET 2.0 COM
希望这能帮到你, 最好的问候, 汤姆。

我觉得只需要配置一个COM+上下文会更容易...不需要编写代码和重新编译。 - codekaizen

0

如果我理解你的意思正确,你想在1.1上构建汇编,而不是2.0。为什么不尝试使用命令行编译器呢?你不需要安装VS 2003来编译和构建汇编。

如果你不知道如何开始,请在沙盒机器上安装VS,构建一个项目并检查输出窗口 - 你会看到用于编译和构建的命令(csc.exe或vbc.exe是最重要的命令)。在大多数情况下,这并不是什么高深的学问。

另一个选择:总体上转移到2.0 -- 不会真正伤害到你。

P.S.: .NET COM对象是错误的拼写。称其为汇编。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接