通过webserver编译exe或dll

时间:2012-05-16 08:00:27

标签: c# compiler-construction

我想通过我的一个网络服务器编译我的源代码(或其中的一部分)(就像一些网站提供他们程序的夜间版本)。因为我希望我的程序由第三方定制,并且他们有自己的独立应用程序,并在其中说明其徽标和一些自定义字符串。我最好的解决方案是将一个dll文件加载到我的应用程序中,因此我仍然可以更新主应用程序,同时保留第三方的自定义。

那么,第三方进入我的网站,输入一些字段并生成一个dll文件(或者你还有其他更好的方法吗?)并且将包含dll文件应用程序将获取徽标资源及其中的一些字符串,以便在应用程序中显示。

如何做到这一点?我宁愿使用Linux来构建它,但如果Windows更容易,那么这也不是问题。

4 个答案:

答案 0 :(得分:1)

您可以使用CSharpCodeProvider API,这是一个示例:

var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll" }, "foo.exe", true);
parameters.GenerateExecutable = true;
CompilerResults results = csc.CompileAssemblyFromSource(parameters,
@"using System.Linq;
    class Program {
      public static void Main(string[] args) {
        var q = from i in Enumerable.Rnge(1,100)
                  where i % 2 == 0
                  select i;
      }
    }");

results.Errors.Cast<CompilerError>().ToList().ForEach(error => Console.WriteLine(error.ErrorText));

如果您想使用linux,请查看Mono MCS C# Compiler

答案 1 :(得分:0)

在任何一个平台上都很容易。只需将数据接受到模板C#文件中(String.Replace即可正常工作)。然后只是向编译器发出外壳。

答案 2 :(得分:0)

如果您信任您的第三方供应商尝试使用JetBrains的Team City,在svn repo文件夹中提交一些更改,将导致重新编译项目,您将获得预编译的项目。

答案 3 :(得分:0)

这个怎么样

构建一个Web界面,将第三方的自定义功能捕获到数据库中。

设置持续集成服务器以管理自动构建(例如Jenkins)。

然后在CI解决方案中实现自定义构建步骤以获取自定义项,将它们放入源代码的副本中,并让CI为每个客户端执行构建 - 将构建工件发布到客户端可以看到它们的位置(比如说,在网络界面中的某个地方)

您可以在CI服务器中设置自定义触发器,以便在数据库中查看新的自定义项。或者由Web UI中的某些操作触发。