繁体   English   中英

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

[英]sharing a static class with a DLL in C# without passing a reference

VS2012 for Desktop .net Framework 4.5普通Windows窗体应用程序,而不是WPF
您好,我试图寻找答案,但是我不确定正确的术语。 我设法破坏了代码,不明白自己做错了什么。 (我认为我没有做任何更改,但是...)

我有一个包含2个项目的解决方案。 第一个项目是可执行程序,第二个项目是DLL,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:名称“设置”在当前上下文中不存在

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

老实说,我真的没有改变任何与此相关的内容,但显然我也做了。 看着它,我看不到项目2如何在没有引用的情况下访问项目1中的类,但是project2_class构造函数的参数列表不包含一个,并且我绝对肯定它没有改变(而且由于向后兼容的原因,我无法更改它)。 非常感谢您提供帮助,因为要使其正常工作需要大量的工作。


作为附带说明,我肯定已经学到了关于不使用源代码控制的课程。 而不是发表“这是如何工作的”评论,而不是发表“这是做什么的”评论。

动态可以帮助您吗? 您无法在编译时获取设置字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM