C# ildasm和动态exe文件

C# ildasm和动态exe文件,c#,.net,reflection,intermediate-language,C#,.net,Reflection,Intermediate Language,我正在尝试创建一个可以修改IL中属性的应用程序,以创建一个稍微不同的可执行文件。例如,客户端A运行应用程序,WinForm标签上的标签显示客户端A:。客户端B运行应用程序,标签上写着客户端B。很简单,我知道使用配置文件或资源文件,但这不是这个项目的选项。主程序需要能够根据用户输入的一些表单字段动态生成.exe文件 我的解决方案是创建一个独立的可执行文件,其中包含使其动态化所需的所有元素。然后,我使用ildasm生成IL,并认为我可以使用此IL并用标记替换我想要动态的元素。在用户使用regex等填

我正在尝试创建一个可以修改IL中属性的应用程序,以创建一个稍微不同的可执行文件。例如,客户端A运行应用程序,WinForm标签上的标签显示客户端A:。客户端B运行应用程序,标签上写着客户端B。很简单,我知道使用配置文件或资源文件,但这不是这个项目的选项。主程序需要能够根据用户输入的一些表单字段动态生成.exe文件

我的解决方案是创建一个独立的可执行文件,其中包含使其动态化所需的所有元素。然后,我使用ildasm生成IL,并认为我可以使用此IL并用标记替换我想要动态的元素。在用户使用regex等填充表单后,我可以在运行时替换这些标记。 问题是,如果我将ILDASM生成的IL文件重新保存为exe并尝试运行它,则会出现问题。我只是启动控制台,什么也不做

我走错方向了吗?我不想深入研究反射,因为dynamic.exe非常简单,我认为使用ildasm对IL进行反向工程将是最快的方法

非常感谢您的想法和建议。
Tony可执行文件是现场生成的吗?或者您是否为客户生成可执行文件,然后发送结果

如果您是生成可执行文件的人,则可以将特定于客户的数据/代码放在单独的DLL中,并将其作为资源嵌入可执行文件中,并在发生AppDomain.CurrentDomain.AssemblyResolve事件时加载


这样,您就可以对客户特定的数据进行版本控制。

当您说重新保存ildasm创建的文件并运行它时,您的意思是您正在通过提供的Microsoft IL编译器运行所有IL文件吗?如果没有,你可能想试试。在执行替换时一定要非常小心,因为IL有一些非常具体的要求,而且ilasm不像csc和vbc这样的高级编译器那样宽容

您还可以使用来修改程序集文件,这样您就不必将IL发送给客户


如果您打算继续发送源代码并进行编译,那么您可以通过发送C源代码并在现场进行编译来完成相同的任务,而无需使用IL,因为它包含在框架中。

Hi here,好主意,但恐怕需要在现场生成可执行文件:我会尽量避免将特定于客户的数据发送给不打算发送的客户。另外,让客户生成一个可执行文件听起来有点脆弱,如果出现问题,就感觉不可能进行调试。如果要修改可执行文件,我会尝试替换嵌入的资源,而不是生成任何内容。只是想一想,给他们发送一个下载应用程序,从Web服务器获取正确的可执行文件怎么样?