在C#中与DLL共享静态类而不传递引用

时间:2013-10-26 02:20:32

标签: c# .net visual-studio-2012 dll .net-assembly

VS2012用于桌面.net框架4.5普通的Windows窗体应用程序,而不是WPF
您好,我试图寻找答案,但我不确定正确的术语。我设法破坏了我的代码,无法理解我做错了什么。 (我不认为我改变了什么,但是......)

我有一个包含2个项目的解决方案。第一个项目是可执行程序,第二个是DLL,它在运行时加载并由第一个项目使用。

第一个项目包含一个表单,以及一个在同一名称空间中带有公共静态字符串的静态类。 (和一些其他未连接的类)。具体是:

namespace project1_namespace
{
    static class settings
    {
        public static string some_words = "some words in a string";
    }

    class dll_callback{
         //.. some public methods here
    }

    dll_callback dllcallback; // instance is initialised in the code (not shown)
    Form form; 

    public partial class frm_splash : Form
    {
        private void frm_splash_FormClosing(object sender, FormClosingEventArgs e)
        {
           // this function actually loads the DLL, ensuring its the last step
           //... some error checking code removed for brevity

               Assembly assembly = Assembly.LoadFrom("c:\dllpath\project2.dll");
               Type type_init = assembly.GetType("project2_class");
               object init = Activator.CreateInstance(type_init, form, dllcallback);           

           //... some error checking code removed for brevity
        }// end method
    }// end form class
}// end namespace

当表单关闭时,调用上面显示的方法调用第二个项目类project2_class构造函数。

项目2中的

,DLL,有:

namespace project2_namespace
{
// how did i get this working to reference "settings" class from project 1??
    public class project2_class
    {
        public project2_class(project2_namespace.Form1 form_ref, object callback)
        {
            settings.some_words = "the words have changed";
            //... some more stuff
        }
    }
}

现在,我在project2的一个完全不同的部分尝试了一些代码,VS2012突然开始拒绝编译声明:
错误CS0103:当前上下文中不存在名称“settings”

标准解决方案似乎是添加对project2的引用,但这将创建循环依赖项,因为项目1将2调用为DLL。

我真的不认为我改变了与此相关的任何东西,但我也很清楚。 看着它,我无法看到项目2如何在没有引用的情况下访问项目1中的类,但是project2_class构造函数的参数列表不包含一个,我绝对肯定它没有改变(我出于向后兼容的原因无法更改它。 我真的很感激这方面的帮助,因为要完成这项工作需要付出很多努力。


作为旁注,我肯定已经吸取了关于不使用源代码控制的教训。而不是“如何运作”评论而不是“这是什么”评论。

1 个答案:

答案 0 :(得分:1)