C# コードをメモリ内の文字列にコンパイルし、実行時に使用する関数を作成しました。それは非常にうまく機能します。
次に、小さなクラス ライブラリ (mynew.dll と呼びましょう) を作成し、c:\mylibraries\mynew.dll に配置しました。
私のコードでは、参照されたアセンブリを追加できます。私はこのようにします:
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters
{
GenerateExecutable = false,
GenerateInMemory = true
};
parameters.ReferencedAssemblies.Add(@"c:\mylibraries\mynew.dll");
CompilerResults results = provider.CompileAssemblyFromSource(parameters, mycode);
さて、私の C# コード文字列 (mycode) には、「Execute」という関数があります。この関数で mynew.dll から名前空間とクラスを宣言すると、次のエラーが発生します。
ファイルまたはアセンブリ 'MyNew、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。
メイン アプリケーションの bin/debug フォルダーに dll をコピーすると、突然動作しますが、これは望ましくありません。メインアプリケーションではなく、実行時にコンパイルされるコードを使用したい。
ここに投稿する前にこれを行いました:
- 検索 Stackoverflow
- 中古グーグル
- dll をメモリではなくディスクにコンパイルしようとしました。これは機能します...問題は、dllがIISでロックされており、IISサーバーを再起動しないと削除できないことです。コードはいつでも変更される可能性があり、人々がウェブサイトにいるときにサーバーを再起動したくないため、オプションはありません。
これを修正する方法はありますか?