1

我想通过我的一个网络服务器编译我的源代码(或其中的一部分)(比如一些网站提供他们程序的夜间构建)。因为我希望我的程序由第三方定制,并且他们有自己的独立应用程序,其中包含他们的徽标和一些自定义字符串。我更喜欢的解决方案是一个 dll 文件,该文件将被加载到我的应用程序中,这样我仍然可以更新主应用程序,同时保留第三方的定制。

于是,第三方进入我的网站,输入一些字段并生成一个dll文件(或者您有没有其他更好的方法来做到这一点?)并且该dll文件将被应用程序包含,它将获取徽标资源以及其中的一些字符串,以显示在应用程序中。

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

4

4 回答 4

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

于 2012-05-16T08:03:55.327 回答
0

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

于 2012-05-16T08:04:35.437 回答
0

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

于 2012-05-16T08:04:37.303 回答
0

这个怎么样

构建一个 Web 界面以将第三方的定制内容捕获到数据库中。

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

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

您可以在 CI 服务器中设置自定义触发器,以观察数据库是否有新的自定义。或者被 Web UI 中的某些操作触发。

于 2012-05-16T08:05:53.377 回答