Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在windows应用程序运行时重建它_C#_Sharpdevelop_Rebuild - Fatal编程技术网

C# 如何在windows应用程序运行时重建它

C# 如何在windows应用程序运行时重建它,c#,sharpdevelop,rebuild,C#,Sharpdevelop,Rebuild,我构建了一个作为POS系统的windows应用程序,我想添加一个功能,允许用户在windows中添加新按钮。因此,在用户输入项目名称和价格等信息后,应用程序将生成代码来创建新按钮,并将代码添加到MainForm.cs和MainForm.Designer.cs中 但是,在我停止应用程序并重新运行编译的exe之前,源代码中的更改不会生效。当应用程序仍在运行时,是否可以使其自身重建?(即,用户输入信息后,可以立即在窗口上看到新按钮) 我已尝试使用Application.Restart();还有这个。刷

我构建了一个作为POS系统的windows应用程序,我想添加一个功能,允许用户在windows中添加新按钮。因此,在用户输入项目名称和价格等信息后,应用程序将生成代码来创建新按钮,并将代码添加到MainForm.cs和MainForm.Designer.cs中

但是,在我停止应用程序并重新运行编译的exe之前,源代码中的更改不会生效。当应用程序仍在运行时,是否可以使其自身重建?(即,用户输入信息后,可以立即在窗口上看到新按钮)


我已尝试使用Application.Restart();还有这个。刷新();,但是它不起作用。

您在这里使用的方法不正确

您不应根据用户输入修改应用程序的代码。

相反,请将用户输入的数据保存在数据库或文件中,并使用此信息动态显示按钮。

此处使用的方法不正确

您不应根据用户输入修改应用程序的代码。

而是将用户输入的数据保存到数据库或文件中,并使用此信息动态显示按钮。

我认为这是可能的。。。但也有局限性。 您可以创建AppDomain并加载dll代码(此dll包含您的申请表)。 然后,卸载应用程序域,构建dll并重新创建一个新的应用程序域

当然,您必须关闭您所在的窗口,并且拥有一个与简单WinForms应用程序完全不同的DLL体系结构


这是我推荐的自动更新方法,例如,我认为这是可能的。。。但也有局限性。 您可以创建AppDomain并加载dll代码(此dll包含您的申请表)。 然后,卸载应用程序域,构建dll并重新创建一个新的应用程序域

当然,您必须关闭您所在的窗口,并且拥有一个与简单WinForms应用程序完全不同的DLL体系结构


这就是我建议自动更新的方法,例如,一句话,不,因为重建应用程序会替换磁盘上的可执行映像文件,而磁盘上的可执行映像文件通常会被正在运行的进程锁定

VisualStudio和其他IDE支持“编辑并继续”,允许在程序等待断点时在运行时替换代码,但仅在有限的情况下(例如修改现有方法中的代码)。对于批量特性或GUI更改来说,它不够灵活(如果您使用的是XAML资源,这是不可能的)


如果您希望获得所需的灵活性,那么您必须深入挖掘支持这些功能的老式大型机风格系统(如IBM Z系列)。

一句话,没有-因为重新构建应用程序会替换磁盘上的可执行映像文件,而磁盘上的可执行映像文件通常会被正在运行的进程锁定

VisualStudio和其他IDE支持“编辑并继续”,允许在程序等待断点时在运行时替换代码,但仅在有限的情况下(例如修改现有方法中的代码)。对于批量特性或GUI更改来说,它不够灵活(如果您使用的是XAML资源,这是不可能的)


如果您希望获得所需的灵活性,那么您必须深入挖掘支持此类功能的老式大型机风格系统(如IBM Z系列)。

我认为Daniel Hilgarth给出了正确答案“您的方法是错误的”。通常,当你发现事情不明显时,这意味着你在做一些非本意的事情。您当然不想根据用户的行为重新编译代码等!我认为Daniel Hilgarth给出了正确的答案“你的方法是错误的”。通常,当你发现事情不明显时,这意味着你在做一些非本意的事情。您当然不想根据用户的行为重新编译代码等!谢谢我还担心在没有调试的情况下运行应用程序可能会导致严重错误。这只是一个没有连接数据库的实践,我想我最好找到一种动态显示按钮图标的方法。我还担心在没有调试的情况下运行应用程序可能会导致严重错误。这只是一种不用连接数据库的做法,我想我最好找到一种动态显示按钮的方法