С# Установить зондирование privatePath без app.config?

У меня есть приложение С#, и для организации его файлов у меня есть некоторая DLL в папке "Данные". Я хочу, чтобы EXE проверял эту папку для DLL, точно так же, как она проверяет свой текущий каталог. Если я создал App.Config с этой информацией:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="Data" />
    </assemblyBinding>
  </runtime>
</configuration>

Он работает без проблем. Я не хочу иметь App.Config. Есть ли способ установить путь исследования без использования app.config?

Ответ 1

Вы можете сделать это для создания новых AppDomains, я не верю, что есть способ сделать это в управляемом коде для текущего/стандартного AppDomain.

Изменить: Создание AppDomain с закрытым путем: используйте AppDomain.CreateDomain и AppDomainSetup.PrivateBinPath

Ответ 2

Это старый вопрос, но вы также можете обрабатывать событие AppDomain AssemblyResolve следующим образом:

`` `

AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

`` `

и

`` `

 private static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        var probingPath = pathToYourDataFolderHere;
        var assyName = new AssemblyName(args.Name);

        var newPath = Path.Combine(probingPath, assyName.Name);
        if (!newPath.EndsWith(".dll"))
        {
            newPath = newPath + ".dll";
        }
        if (File.Exists(newPath))
        {
            var assy = Assembly.LoadFile(newPath);
            return assy;
        }
        return null;
    }

`` `

Ответ 3

setup.ApplicationBase = dataDir; тоже самое, что и privatePath = "Данные"

    [STAThread]
    static void Main()
    {
        #region Add Dll Folder

        System.Reflection.Assembly assembly = System.Reflection.Assembly.GetAssembly(typeof(MainForm));
        string dataDir = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(new Uri(assembly.GetName().CodeBase).LocalPath), "Data");

        AppDomainSetup setup = new AppDomainSetup();
        setup.ApplicationBase = dataDir;

        #endregion Add Dll Folder

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MainForm());
    }