В Dotnet2.0 и более поздних версиях программа отказывается запускаться, если отсутствует один из ее зависимых (статически привязанных) dll.
При использовании Dotnet1.1 и 1.0 программа запускалась, но позже вылетала при попытке использовать функциональностьотсутствующей сборки.
Интересно, есть ли что-то вроде
- переключателя компилятора,
- опция конфигурации или
- атрибут dotnet []
, чтобы разрешить мне запускать приложение, когда отсутствуют определенные библиотеки.
Возможно ли это без изменения исходного кода (кроме применения некоторых атрибутов)?
Я не хочу загружать сборки вручную с помощью программного кода или использовать IOC-Framworks.
Обновление: под "статическими ссылочными библиотеками" я подразумеваю противоположность динамической загрузки библиотеки DLL в свой собственный программный код с использованием отражений и Assembly.Loadxxxx().
Обновление 2010-12-25 Я думал, что сложно.Спасибо простое решение от @erinus:
Мне просто нужно попробовать попробовать поймать и все заработало:
using System;
using System.IO;
using log4net; // log4net.dll might be missing
namespace ConsoleAppWithMissingDll
{
class Program
{
static bool dllIsInstalled = true;
static void Main(string[] args)
{
Console.WriteLine("Hello missing dll");
try
{
OutputViaLog4Net("hello log4net");
}
catch (FileNotFoundException)
{
dllIsInstalled = false;
Console.WriteLine("Log4net-dll not found");
}
Console.WriteLine("Program continued");
#if DEBUG
Console.WriteLine("Press any key to exit");
Console.ReadKey();
#endif
}
private static void OutputViaLog4Net(string message)
{
ILog logger = LogManager.GetLogger("MyLogger");
logger.Debug(message);
}
}
}