2011-12-14 28 views
2

私はShadow Copyを最初に試しています。AppDomainシャドウコピー参照されているアセンブリを含める

static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 

     var sApplicationDirectory = Application.StartupPath; 
     var sAppName = "propane"; 

     AppDomainSetup oSetup = new AppDomainSetup(); 
     string sApplicationFile = null; 

     // Use this to ensure that if the application is running when the user performs the update, that we don't run into file locking issues. 
     oSetup.ShadowCopyFiles = "true"; 
     oSetup.ApplicationName = "MyApplication"; 

     // Generate the name of the DLL we are going to launch 
     sApplicationFile = System.IO.Path.Combine(sApplicationDirectory, sAppName + ".exe"); 

     oSetup.ApplicationBase = sApplicationDirectory; 
     oSetup.ConfigurationFile = sApplicationFile + ".config"; 
     oSetup.LoaderOptimization = LoaderOptimization.MultiDomain; 

     // Launch the application 
     AppDomain oAppDomain = AppDomain.CreateDomain(sAppName, AppDomain.CurrentDomain.Evidence, oSetup); 
     oAppDomain.SetData("App", sAppName); 
     oAppDomain.ExecuteAssembly(sApplicationFile); 

     // When the launched application closes, close this application as well 
     Application.Exit(); 

     //Application.EnableVisualStyles(); 
     //Application.SetCompatibleTextRenderingDefault(false); 
     //Application.Run(new Form1()); 
    } 
} 

私が参照dllファイルに到達するまで実行がうまく、そのランニングtempディレクトリに達している:私は、次のコードを持っています。プロジェクト全体を通して参照している14-16のDLLは、この一時ディレクトリにコピーされていないため、アプリケーションが爆発します。

私には何が欠けていますか?どうすればそれらをすべてtempディレクトリにコピーすることもできますか?

+0

すべての依存関係は、sApplicationFileと同じディレクトリにありますか? (サブディレクトリにはありません) –

+0

はい、実行可能ファイルと同じディレクトリにあります。 – ErocM

答えて

1

私たちのアプリでは事実上同じコードがあり、うまくいきます。

唯一の違いは、私たちの主な方法はまた、

[LoaderOptimization(LoaderOptimization.MultiDomain)] 

あなたはそれが違いを作るかどうかを確認するためにそれを試みるかもしれませんが飾られていることです。

+0

私はこれを追加し、参照をコピーしませんでした。それはあなたのためですか? – ErocM

+0

これは実際には次の行でカバーされていました。oSetup.LoaderOptimization = LoaderOptimization.MultiDomain; – ErocM

+0

これは、同じコードを再度JITすることを防ぐために、appdomain間のアセンブリの共有にのみ影響します。それは、同じプロセスの複写に物理的メモリを浪費することなく、同一のコンパイルされたコードをプロセス間で共有することを可能にする、プロセスとアプリケーションドメイン全体で共有できるNGENイメージとの関連性が高くなります。 –

関連する問題