是否可以从另一个单独的 .NET AppDomain 更改 .NET AppDomain 中的字符串属性的值

Posted

技术标签:

【中文标题】是否可以从另一个单独的 .NET AppDomain 更改 .NET AppDomain 中的字符串属性的值【英文标题】:Is it possible to change the value of a string property within a .NET AppDomain from another seperate .NET AppDomian 【发布时间】:2010-10-19 23:41:35 【问题描述】:

假设两个 AppDomain 在同一进程中运行,是否可以从另一个单独的 .NET AppDomain 更改给定 .NET AppDomain 中类的公共属性(类型字符串)的值。另一个重要的假设是,在包含该属性的 AppDomain 中运行的代码不能被修改.. 即.. 重新编译并进行任何更改。

谢谢!

【问题讨论】:

【参考方案1】:

当然。您只需通过 MarshalByRef 对象公开对该属性的访问权限,该对象将允许 AppDomain A 中的一个实例伸出并触摸 AppDomain B 中的属性。

这是一个简单的类示例,该类将从 AppDOmain A 在 AppDomain B 中实例化:

   internal class SomeLinkClass : MarshalByRefObject
   
      internal void UpdateProperty(string newValue)
      
         // this function actually will execute within AppDomain B

         // somehow get access to the property and then set it 
         // with the new value.
      
   

下面是您从 AppDomain A 中使用它的方式:

// somehow you need to get a ref to AppDomain B
    SomeLinkClass linkClass = appDomainB.CreateInstanceFromAndUnwrap(
                                  Assembly.GetExecutingAssembly().Location,
                                  typeof(SomeLinkClass).FullName) as SomeLinkClass;

【讨论】:

@Russell - 我应该澄清一下,您必须假设您不能在架构上修改包含您尝试更改的属性的 AppDomain。 @Doug:自从您发表评论以来,我已经更新了我的答案,所以如果解决方案仍然不起作用以及原因,请告诉我。然后也许我们可以改进它。 @Russell - 我无法对代码进行任何更改 - 如果可以的话,我同意你的回答可能会有所帮助 - 我认为这可能需要通过反思来完成 - 不过谢谢 @Doug:我的方式不需要对 AppDomain B 中的代码进行任何更改。两个问题,1:您尝试修改的属性是静态属性还是实例属性? 2:如果是实例属性,那么如何找到具有要修改的属性的合适实例? @Russell - 所以基本上 AppDomain A 只需要保持不变,AppDomian B 代表一个小应用程序来更改 A 中的实例成员。只有一个包含属性的类的单个对象实例AppDomain A.

以上是关于是否可以从另一个单独的 .NET AppDomain 更改 .NET AppDomain 中的字符串属性的值的主要内容,如果未能解决你的问题,请参考以下文章

是否有一个 .Net C# 分析器可以报告通用方法的不同类型执行的单独统计信息?

如何从另一个 .NET 进程获取对象的句柄?

如何从另一种形式调用多个方法C#

从另一个单独的表行更新一个表行[重复]

从另一个线程捕获异常

是否可以在 Asp.net Core 解决方案的单独层中管理 DBContext 的注入