是否可以从另一个单独的 .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 中的字符串属性的值的主要内容,如果未能解决你的问题,请参考以下文章