1

ソース(またはその一部)をWebサーバーの1つでコンパイルしたい(一部のWebサイトがプログラムのナイトリービルドを提供しているように)。私のプログラムをサードパーティがカスタマイズしたいので、サードパーティには独自のスタンドアロンアプリケーションがあり、ロゴといくつかのカスタム文字列が含まれています。私の好ましい解決策は、アプリケーションにロードされるdllファイルです。そのため、サードパーティによるカスタマイズを維持しながら、メインアプリケーションを更新できます。

したがって、サードパーティが私のWebサイトにアクセスし、いくつかのフィールドに入力すると、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 リポジトリ フォルダーにいくつかの変更をコミットすると、プロジェクトが再コンパイルされ、プリコンパイルされたプロジェクトが取得されます。

于 2012-05-16T08:04:37.303 に答える
0

これはどう

サードパーティのカスタマイズをデータベースなどに取り込むための Web インターフェイスを構築します。

自動ビルドを管理するための継続的インテグレーション サーバーをセットアップします (たとえば、Jenkins )。

次に、CI ソリューションにカスタム ビルド ステップを実装してカスタマイズを取得し、それらをソース コードのコピーにドロップし、クライアントごとに CI にビルドを実行させます。ビルド アーティファクトをクライアントが表示できる場所 (たとえば、ウェブインターフェース)

CI サーバーにカスタム トリガーを設定して、データベースで新しいカスタマイズを監視できます。または、Web UI での何らかの操作によってトリガーされます。

于 2012-05-16T08:05:53.377 に答える