У меня есть приложение, в котором я должен предоставить пользователю возможность «на лету». Вы можете рассматривать это как своего рода механизм расчета, с большим количеством данных и некоторыми математическими/числовыми алгоритмами. Я предоставляю некоторые статические поля (данные) и методы (вычисления), с помощью которых пользователь может создать допустимое выражение C#, которое должно вернуть double.Использование System.Addin с сборкой, сгенерированной в памяти
Пользователь вводит допустимое выражение в текстовое поле, и я должен предоставить результаты. Что я сейчас делаю, так это то, что я вставляю выражение статическому методу сборки, которая создается в памяти, следуя шагам в http://blogs.msdn.com/b/abhinaba/archive/2006/02/09/528416.aspx. Затем я использую отражение, чтобы вызвать конкретный метод и вернуть результат.
Это прекрасно работает, за исключением того факта, что сгенерированные сборки продолжают накапливаться в течение жизненного цикла приложения. Это было нормально, когда все, что у меня было, было клиентскими приложениями, но теперь я перехожу к серверному приложению, и я не хочу периодически переустанавливать службу.
При поиске как разгрузить сборку я узнал пространство имен System.Addin. Он делает именно то, что я хочу: загрузка сборки на другой AppDomain, который я могу отбросить последним. Он даже инкапсулирует все отражение.
Единственная проблема, с которой я сталкиваюсь сейчас, заключается в том, что AddInStore ожидает путь к файлу, но все мои сборки генерируются в памяти, устанавливая свойство GenerateInMemory для параметров CompileParameters, используемых для true. Это абсолютно необходимо, чтобы мои сборки были записаны на диск? Или можно использовать сборку, скомпилированную во время выполнения непосредственно в качестве надстройки?
С наилучшими пожеланиями, Карлос