Может, я смогу добавить что-нибудь новенькое. Если я не пропустил что-то (возможное!) В этих многочисленных сообщениях, похоже, нет принятого решения или какого-либо упоминания System.Reflection.Assembly.LoadFrom (filename), который является методом .NET. предоставляет, когда вам нужен явный контроль. Если на вкладке «Модули» отображаются сборки, загружаемые из неожиданных мест, вы можете исправить это и восстановить отладочные работы.
Иногда для этого есть очень веские причины. Для меня это было тогда, когда я поддерживал платформу, которая позволяла пользователям создавать несколько произвольных подключаемых модулей, и мне приходилось быть осторожным, чтобы не было гонки с этими подключаемыми модулями по поводу того, откуда загружаются общие сборки. Целью было убедиться, что «золотые» версии, находящиеся в том же каталоге, что и мой Platform.exe, ВСЕГДА будут загружаться без исключения. (Включение их в GAC иногда является правильным ответом, но не всегда).
В других сообщениях я справедливо упоминал, что настройки сборки по умолчанию заставляют ссылочные сборки копироваться локально в \ bin подключаемого модуля при его сборке. Плагины - это один из примеров использования, когда это полная противоположность тому, что вы хотите. Может быть 100 пользователей со 100 плагинами и 100 копиями данной сборки. Какой из 100 загрузится? И будет ли это последняя правильная версия?
Вот как я смог надежно сделать это для реальной платформы, которую я поддерживал более десяти лет, загружая сборки заранее.
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Windows.Forms;
[STAThread]
static void Main()
{
PreLoadAssemblies();
Form appInstance = new InstanceManager();
Application.Run(appInstance);
}
private static void PreLoadAssemblies()
{
// Obtain an explicit folder path relative to where
// the main executable ("Platform.exe") is running.
string dir =
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) +
@"\Accessories\PlugIn\google-drive-sync\netstandard2.0";
PreLoadAssembly(dir, "Google.Apis.Auth.dll");
PreLoadAssembly(dir, "Google.Apis.Drive.v3.dll");
PreLoadAssembly(dir, "Google.Apis.Auth.PlatformServices.dll");
PreLoadAssembly(dir, "Google.Apis.dll");
PreLoadAssembly(dir, "Google.Apis.Core.dll");
PreLoadAssembly(dir, "Google.Apis.PlatformServices.dll");
PreLoadAssembly(dir, "Newtonsoft.Json.v10.dll");
}
private static void PreLoadAssembly(string dir, string name)
{
try
{
Assembly resolved = Assembly.LoadFrom(dir + @"\" + name);
Debug.Assert(resolved != null);
}
catch (Exception ex)
{
Debug.Assert(false, ex.Message);
}
}
person
Community
schedule
04.04.2020
<DebugSymbols>true</DebugSymbols>
в VS2015, я вручную добавил его, и он работал нормально. - person kuskmen   schedule 21.11.2016Program.cs
, наведите указатель мыши на заголовок, чтобы увидеть полный путь. Возможно, вы переместили свое решение, но ваше рабочее пространство по-прежнему указывает на файл, который у вас есть в старом месте! - person Alexandru   schedule 24.08.2020