После того, как сборка загружена в исполняемый домен приложения, она не может быть выгружена (независимо от того, создается ли она с помощью отражения с помощью Activator.CreateInstance).
Рекомендованный подход заключается в реализации вторичного домена приложений со сроком службы, который может выгружаться, когда он хочет утилизировать сборки.
Есть множество примеров, но вот один из них:
http://www.dotnet247.com/247reference/msgs/28/142174.aspx.
Поскольку управление временем жизни вторичных доменов приложений может быть затруднительным, в качестве альтернативы, если вы используете ASP .NET и хотите загрузить много динамических сборок, вы можете проверить, не переполняется ли ваш текущий домен приложений динамически загружаемыми сборками, связывая к событию AppDomain.CurrentDomain.AssemblyLoaded
и подсчету, а затем запрашивая среду размещения, перезапустите текущий домен приложения, когда он достигнет критического числа (скажем, 500), например:
HostingEnvironment.InitiateShutdown();