在 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 构造函数的参数列表不包括一个,我绝对肯定它没有改变(并且出于向后兼容性原因我无法更改它)。非常感谢对此的帮助,因为要使其正常工作需要做很多工作。
作为旁注,我肯定已经吸取了不使用源代码管理的教训。 并且不进行"这是如何工作的"评论而不是"这是做什么"的评论。
动态可以帮助你吗?您无法在合规时获取设置字符串。