Я должен согласиться с @Hans Passant (и вот некоторая информация об часто обсуждаемом аде DLL), но так как вы задали вопрос, я постараюсь ответить на него.
Вы можете связать стороннюю DLL в качестве ресурса.Пожалуйста, см. Подробности в этом вопросе .
Что касается других ваших вопросов, я бы просто предоставил соответствующие классы из сторонней библиотеки DLL в собственном пространстве имен и, возможно, использовал бы методы расширения.чтобы обеспечить любую дополнительную функциональность, которую вы хотите.
Например, вы можете предоставить доступ к методу NLog Log()
, используя статический метод в вашем классе, скажем XyzNLog.Logger.Log()
, заботясь об инициализации и обо всем остальном внутри,внутри вашего кода (статический конструктор или что-то еще, что вам нравится).Поскольку вы загружаете сборку NLog, используя метод, описанный выше, вы будете единственным, кто имеет доступ к встроенной сборке NLog напрямую, и пользователь не сможет получить к ней доступ.Теперь вы не получаете преимущества автоматической экспозиции всех классов из NLog, вам все равно придется выставлять их вручную в этом случае.
РЕДАКТИРОВАТЬ : Другой подход - попытаться использоватьILMerge с / внутренним флагом , как описано здесь .Возможно, вы не сможете полностью решить проблему, но посмотрите на эту статью , чтобы узнать, сможете ли вы избежать ловушек, описанных автором.Оповещение о спойлере: на этом тоже не все peaches'n'cream, но это может сработать, если приложить дополнительные усилия.