gpt4 book ai didi

.net - 从 .net 4.5 测试调用 .net 2.0 方法会导致 RemotingException

转载 作者:行者123 更新时间:2023-12-01 01:14:07 25 4
gpt4 key购买 nike

在我的解决方案中,我有一个使用 .net 4.5 的测试项目,它调用用 .net 2.0 编写的类库项目的方法。

我已经成功地调用了许多方法(所有函数),但是一个方法(一个 Sub)给我带来了问题。它抛出 RemotingException。

The method '...' was not found on the interface/type.

当我在测试类中实例化 MyType 时,Intellisense 工作正常。只有当我尝试运行测试时它才会抛出异常。

我已经删除了我的测试项目中的引用并重新添加了它。我已将引用添加为“解决方案”引用和“浏览”引用。

更新 1

我将 Sub 切换为 Function,但仍然收到 RemotingException。我在 .net 2.0 项目中调用的方法是我在最初创建测试项目并测试所有其他方法后添加的新方法。

更新 2

类库是这样定义的:

<ClassInterface(ClassInterfaceType.AutoDual)>
<Transaction(TransactionOption.Required)>
Public Class MyComponent
Inherits ServicedComponent

在测试中,我引用了这样的类:

<TestClass()>
Public Class MyTests

Protected Property MyCom As MyComponent

Public Sub New()
MyCom = New MyComponent()
End Sub

当我运行测试时,MyCom 被创建为这个对象,而不仅仅是 MyComponent 的一个实例。

System.Runtime.Remoting.Proxies.__TransparentProxy

最佳答案

好的,对于遇到此问题的任何其他人,这是我的发现。

事实上,重启并不能解决我的问题。这是因为我还在本地运行的组件服务中重新注册了我的新 dll。

当您测试 ServicedComponent 并创建该 ServicedComponent 的实例时,它实际上将 Remoting Proxy 包装在当前在 COM+ 中运行的组件周围,而不是您认为正在调试的实际类。最初这对我来说不是问题,但后来我决定不应该直接从 COM+ 引用在 bin\debug 中找到的我的 dll,所以我将它复制并移动到另一个位置。我这样做是因为当我更改我的 ServicedComponent 并重建我的解决方案时,我的构建经常挂起。显然,当您构建一个 ServicedComponent 时,如果还没有同名的组件在那里运行,它会尝试将其放入本地 COM+ 中。

因此,通过移动我的 dll 并修复我的构建挂起,我无意中造成了这个问题。不过这很酷,因为它使我对如何测试 ServicedComponents 有了更深入的了解。

此后,我在 COM+ 中重新创建了我的组件,并再次引用了 bin\debug 中的组件。当我在不关闭 com 应用程序的情况下构建时,它很好地挂起。这是一个很好的提醒,让我知道我实际上是在其自己的地址空间中针对真实的 COM 组件进行测试,而不仅仅是我的类在托管内存中的实例。

干杯!

关于.net - 从 .net 4.5 测试调用 .net 2.0 方法会导致 RemotingException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20891645/

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