У меня есть несколько приложений .NET на C #, а также API для доступа к базе данных. Я хочу поместить все версии API в базу данных и попросить их выбрать самую высокую версию и номер сборки, но придерживаться старшего и младшего номеров, с которыми они были построены. Обычно, когда я ссылаюсь на API 1.2.3.4, я хочу, чтобы ссылка читалась 1.2.*.*, чтобы приложения просто принимали 1.2.3.5 Я вижу, что могу сделать это с помощью файлов конфигурации XML. Я бы предпочел, чтобы это соблюдалось. Подобно политике публикации, но без дополнительных файлов. Я мог согласиться на это. Другая проблема - все решения, которые я вижу, перенаправляют одну версию на другую конкретную версию, а не только на любую более новую версию.
Как мне это сделать?
Может ли кто-нибудь указать мне источник информации о политике издателя?
Ответ 1 · рейтинг 30 · Don Kirkby
Благодаря предложению Леппи использования события AppDomain.AssemblyResolve , Мне удалось решить аналогичную проблему. Вот как выглядит мой код:
public void LoadStuff(string assemblyFile)
{
AppDomain.CurrentDomain.AssemblyResolve +=
new ResolveEventHandler(CurrentDomain_AssemblyResolve);
var assembly = Assembly.LoadFrom(assemblyFile);
// Now load a bunch of types from the assembly...
}
Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
var name = new AssemblyName(args.Name);
if (name.Name == "FooLibrary")
{
return typeof(FooClass).Assembly;
}
return null;
}
Это полностью игнорирует номер версии и заменяет уже загруженную библиотеку на любую ссылку на библиотеку с именем "FooLibrary". Вы можете использовать другие атрибуты класса AssemblyName, если хотите быть более строгими. FooClass может быть любым классом в сборке FooLibrary.