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

本文关键字:引用 静态类 中与 DLL 共享 | 更新日期: 2023-09-27 18:36:53

VS2012 for Desktop .net Framework 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:当前上下文中不存在名称"设置"

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

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


作为旁注,我肯定已经吸取了不使用源代码管理的教训。 并且不进行"这是如何工作的"评论而不是"这是做什么"的评论。

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

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