我在同一个解决方案中创建了5个项目,假设它们都具有相同的应用程序域,因此它们都可以共享静态变量(因为它是每个appdomain的静态)所以我如何确保它们都在同一个appdomain中?如果他们不是如何让他们都在同一个应用程序域运行。我怎么能给他们相同的命名空间,他们仍然有自己的名称空间?
例如project1
名称空间为Bigproject.project1
,project2
名称空间为Bigproject.project2
,依此类推?
(我在使用winf。应用程序时遇到了麻烦)
它不是一个带库的项目,它是2个控制台应用程序,有1个win表单和2个库,问题是控制台表单中的一个从该库获取的不同实例而不是win表单的实例例如,我引用静态变量的实例,因此我怀疑我没有在同一个appdomain上运行
答案 0 :(得分:1)
AppDomains特定于流程。只需在同一个过程中运行它们。
进程可以有多个AppDomain。如果您正在创建AppDomain或在不同的进程中运行这些程序集,那么您将手动管理它们之间的通信。
答案 1 :(得分:1)
我在同一个解决方案中创建了5个项目,假设它们都具有相同的应用程序域,因此它们都可以共享静态变量
如果您的解决方案只有一个引用其他库的可执行文件,我认为这是一个合理的假设。
如何确保它们都在同一个应用领域?
应用领域将由他们引用的程序集决定。你不能确保"将两个库加载到同一个应用程序域中 - 两个独立的应用程序在单独的应用程序域中引用库是完全合理的。
也就是说,如果库被相同的可执行文件引用,那么它们将位于同一应用程序域中(您必须将程序集显式加载到单独的应用程序域中)
它不是一个拥有图书馆的项目,它是2个控制台应用程序,包含1个win表单和2个库
然后,您需要使用一些过程间通信(Web服务,WCF)或中央存储库(数据库)。
答案 2 :(得分:0)
项目不是AppDomains的同义词,除非您专门创建新的应用程序域,否则您在应用程序中引用的所有对象很可能通过其入口点机制位于同一个应用程序域中。该机制可以是ASP.NET等下的.exe或Web请求。
常见的例外情况是:
对于从一个应用域通信到另一个应用域的症状,您会看到您的调用堆栈中包含代理,请参阅MarshalByRefObject
和ContextBoundObject