1

C# コードをコンパイルし、実行時に出力を起動するアプリケーションがあります。これまでのところすべて順調に進んでいますが、WinForms アプリケーションをコンパイルしようとしているときに、参照されているアセンブリで問題が発生しています。

WinForms プロジェクトのプロジェクト フォルダー全体がアプリケーション内にあるため、.csproj ファイルを XML ファイルとして読み取って、参照されているすべてのアセンブリを取得します。したがって、次のように、参照されるアセンブリの名前を文字列として持っています。

System
Microsoft.CSharp
System.Drawing
System.Windows.Forms            etc.

これらの名前だけを知っている実行時にこれらのアセンブリをロードすることは可能ですか? 私のシステムでのそれらの場所のパスはわかっていますが、アプリケーションは他の人のマシンでも正しく実行されるはずです。

アップデート

コンパイルは次のとおりです。クラスからのコードは、クラス ファイルから文字列形式で取得され、それらはすべて配列に格納されます。その配列は、CSharpCodeProvider コンパイラに渡されます。アプリケーションはコンソール プログラムだけで意図したとおりに動作しますが、(WinForms などで) アセンブリが参照されるとすぐに、もちろんこれらのアセンブリもコンパイルする必要があります。

だから私がやろうとしているのは、プロジェクトからすべてのアセンブリをコンパイルしてからロードして、実行時にアセンブリエラーが発生しないようにすることです。

私の現在のコードは次のように機能します:

var assemblies = AppDomain.CurrentDomain
                        .GetAssemblies()
                        .Where(a => !a.IsDynamic)
                        .Select(a => a.Location);
        parameters.ReferencedAssemblies.AddRange(assemblies.ToArray()); //parameters is CompilerParameters

これは機能しますが、Visual Studio から参照されているすべてのアセンブリを追加するだけなので、良い方法ではありません (もちろん、すべてのマシンで機能するとは限りません)。

4

1 に答える 1