Теневое копирование домена приложения Включить сборки, на которые имеются ссылки

Я впервые пытаюсь использовать Shadow Copy. У меня есть следующий код:

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, на которые я ссылался в проекте, не копируются в этот временный каталог, что приводит к взрыву приложения.

Что мне не хватает? Как мне заставить их все копироваться во временный каталог?


person ErocM    schedule 14.12.2011    source источник
comment
Все ли зависимости находятся в том же каталоге, что и sApplicationFile? (не в подкаталогах)   -  person M.Babcock    schedule 15.12.2011
comment
Да, они находятся в том же каталоге, что и исполняемый файл.   -  person ErocM    schedule 15.12.2011


Ответы (1)


В нашем приложении есть практически такой же код, и он работает хорошо.

Единственное отличие состоит в том, что наш основной метод также украшен

[LoaderOptimization(LoaderOptimization.MultiDomain)]

Вы можете попробовать это, чтобы увидеть, имеет ли это значение.

person competent_tech    schedule 14.12.2011
comment
Я добавил это, и он не копировал ссылки. Это для вас? - person ErocM; 15.12.2011
comment
На самом деле это было бы прикрыто этой строкой: oSetup.LoaderOptimization = LoaderOptimization.MultiDomain; - person ErocM; 15.12.2011
comment
Это влияет только на совместное использование сборок между доменами приложений, чтобы предотвратить повторную JIT-компиляцию одного и того же кода. Это более актуально для образов NGen, которые можно использовать совместно для процессов и доменов приложений, что позволяет вам совместно использовать один и тот же скомпилированный код для процессов, не тратя физическую память на дубликаты копий одного и того же. - person Alois Kraus; 15.12.2011