【问题标题】:Dynamically create a compiled .NET exe from source code?从源代码动态创建已编译的 .NET exe?
【发布时间】:2010-08-28 16:51:46
【问题描述】:

我需要将一个自定义的、唯一的、静态的字符串注入我的基于 .NET 的 EXE 中。出于所有意图和目的,假设这是我的 PKI 私钥。

我对如何保护 C# 源代码中的私钥有一些想法,我的问题是如何获取我的 .CS 文件并基于它创建可执行文件?

【问题讨论】:

    标签: c# .net compilation


    【解决方案1】:

    看看CSharpCodeProvider,它本质上可以用于获取包含源代码的字符串并将其编译为程序集(EXE 或 DLL),或者如果需要,可以编译为内存中的程序集。

    您还可以将codeDOM 用于代码生成方面。以'Generating Source Code and Compiling a Program from a CodeDOM Graph' 为起点。

    【讨论】:

    • 一个“内存中”的程序集。迷人。我什么时候用一个?听起来可能很合适
    • @MakerOfThings7,当您想要支持诸如基于用户输入动态生成代码并按需执行而无需将二进制文件保存到磁盘、支持宏等内容时,内存程序集非常好。当然 .NET 已经进化了,你也可以使用动态方法等。这里是动态方法的链接msdn.microsoft.com/en-us/library/exczf7b9.aspx
    【解决方案2】:

    最简单的做法是调用 C# 编译器 csc

    例如:(来自上面链接的 msdn 页面)

    csc /out:My.exe File.cs
    

    将从名为 File.cs 的输入文件生成名为 My.exe 的可执行文件。

    如果您要编译的可执行文件相当复杂,那么保持预编译并仅编译它在运行时调用方法以获取私钥的 DLL 可能会更简单,因为这将是一个更简单的命令传递给 csc 的行。

    【讨论】:

    • csc 是否总是与 .NET 一起安装?客户端框架(.NET 的轻量版)呢?
    • @MakerOfThings,根据msdn.microsoft.com/en-us/library/cc656912.aspx,msbuild 包括在内,但它并没有说明 csc/vbc 的任何一种方式。我认为它们是核心组件,但恐怕我没有无框架的 PC 来验证这一点。
    • 是的,scs.exe 和 vbc.exe 包含在运行时中,而不是 SDK。所以它们在每台目标机器上。
    猜你喜欢
    • 2010-09-15
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    相关资源
    最近更新 更多