Да, общие файлы (если по какой-либо причине вы не хотите размещать их в GAC) можно развернуть, например, в папке Common Programs .
к способу работы вашего приложения вам может понадобиться загрузить их с помощью Assembly.LoadFrom () , используя путь, который вы получаете из Environment.GetSpecialFolder () для среды . SpecialFolders.CommonPrograms или присоединение и обработчик событий для события AppDomain.AssemblyResolve .
Давайте посмотрим на простой и простой пример:
// Put this in your initialization code
public static void Main()
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveAssembly(MyResolveEventHandler);
}
private static Assembly ResolveAssembly(object sender, ResolveEventArgs e)
{
// Clean, check, double check and verify path name to be sure it's a valid
// assembly name and it's not a relative path itself, you may even check e.RequestingAssembly
string path = ...;
return Assembly.LoadFrom(path);
}
Если у вас есть каталог, и вы хотите загрузить их при запуске (на всякий случай ...):
private static LoadThemAll(folderPath)
{
foreach (var path in Directory.GetFiles(folderPath, "*.dll"))
Assembly.LoadFrom(path);
}
Не забудьте добавить правильную обработку ошибок (для неконтролируемых DLL, неправильных версий и все остальное может произойти, особенно потому, что эти сборки будут загружены в ваш AppDomain, и каждый может поместить вредоносный в эту папку).
Конечно, все они могут быть применены к любой (доступной) папке, которая один лучший ... ну, это зависит от того, что вы tr ying для загрузки и того, как он развернут (вы даже можете искать в реестре, чтобы динамически находить, где находятся файлы поддержки).
Наконец, если сборки, на которые вы ссылались, являются сильными, и они находятся на известном, фиксированном, неизменяемом вы можете использовать
в вашем файле .config.