2011-12-14 3 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에 도달 할 때까지 임시 디렉토리에 도달하고 실행 중이다. 프로젝트를 통해 참조한 14-16 개의 DLL이이 임시 디렉토리에 복사되지 않아 앱이 터졌습니다.

무엇이 누락 되었습니까? 어떻게하면 임시 디렉터리에도 복사 할 수 있습니까?

+0

모든 종속성은 sApplicationFile과 동일한 디렉토리에 있습니까? (서브 디렉토리에는 없음) –

+0

예, 실행 파일과 동일한 디렉토리에 있습니다. – ErocM

답변

1

우리는 앱에서 사실상 동일한 코드를 가지고 있으며 잘 작동합니다.

유일한 차이점은 우리의 주요 방법도

[LoaderOptimization(LoaderOptimization.MultiDomain)] 

당신은 그 차이가 있는지 확인하기 위해 그것을 시도 할 수 있습니다로 장식되어 있다는 점이다.

+0

내가 이것을 추가했는데 참조를 복사하지 않았다. 그게 너를위한거야? – ErocM

+0

사실이 내용은이 줄에서 다룰 수 있습니다. oSetup.LoaderOptimization = LoaderOptimization.MultiDomain; – ErocM

+0

동일한 코드를 다시 JIT하는 것을 방지하기 위해 appdomain에서 어셈블리 공유에만 영향을줍니다. 그것은 프로세스와 appdomains에 걸쳐 공유 할 수있는 NGen 이미지와 더 관련이 있습니다. 동일한 프로세스의 중복 사본에 물리적 메모리를 낭비하지 않고 동일한 컴파일 된 코드를 프로세스간에 공유 할 수 있습니다. –