あなたは別々のAppDomain
にあなたのコードをロードし、ホットリロードのシャドウコピーを使用することができます。
static void Main(string[] args) {
using (var host = new NancyHost(new Uri("http://localhost:34455"))) {
host.Start();
Console.WriteLine("started");
Console.ReadKey();
}
}
public class SampleModule : Nancy.NancyModule {
public SampleModule() {
Get["/"] = _ => "Hello World!";
}
}
そして、ホスティングプロセスを再開せずに更新できるようにしたいとします。このようにすることができます(警告 - 非生産準備コード、サンプルのみ)。
static void Main() {
while (true) {
var setup = new AppDomainSetup();
setup.ApplicationBase = @"Path to directory with your nancy app";
setup.ShadowCopyFiles = "true";
var domain = AppDomain.CreateDomain("Nancy", new Evidence(), setup);
domain.ExecuteAssembly(@"Path to your nancy app exe");
AppDomain.Unload(domain);
}
}
次に、2番目の(ホスト)アプリケーションを起動します。新しいアプリケーションドメインを作成し、そこにあなたのnancyアプリケーションを開始します。これで、ホストアプリケーションが動作している間に、nancyアプリケーションを更新することができます(そのシャドウコピーのために、ファイルはロックされていません)。更新を適用するには、ホストアプリケーションの任意のキーを押します。これにより、古いバージョンのアプリドメインが破棄され、プロセスを再起動することなく、新しいバージョンの新しいアプリドメインが作成されます。
このテクニックを使用すると、たとえば、アプリケーションとのディレクトリをFileSystemWatcher
で監視し、アプリケーションドメインの変更をアプリケーションファイルに置き換えることができます。 nancyホストを起動する前に新しいappdomainを最初にロードしてから、古いappドメインを解凍して新しいアプリケーションドメインでnancyホストを起動することで、ダウンタイムを最小限に抑えることもできます。
出典
2017-12-05 11:11:47
Evk
あなたは再起動せずにnancyアプリケーションを更新できるようにしたいですか? – Evk
@Evkはい。再起動が必要な場合は避けたいのですが、これはプログラムでも実行する必要があります –
nginx \ apache \ iisの後ろにホストされているのですか、raw nancyだけが使用されていますか?それは完全な.NETまたは.NETコアですか? – Evk