Создание надстройки Excel на основе C # выполняется вне процесса с минимальными затратами - PullRequest
3 голосов
/ 15 декабря 2008

Я разработал прототип надстройки C # Excel 2003 в VS2005, которая поддерживает объект с некоторыми простыми вызовами, а также отдельный RTD-класс, и все они находятся на большом существующем внутреннем стеке C #.

Все отлично работает как есть, но ...

Мне сказали, что во избежание потенциальных конфликтов с другими надстройками Excel, которые могут нуждаться в другом времени выполнения .Net, мне придется вытолкнуть .Net-код из этого процесса.

1) Это правда?

2) Может ли это быть сделано таким образом, чтобы сервер вне процесса запускался автоматически по требованию, был доступен только соответствующему пользователю (для упрощения вопросов безопасности) и не нуждался в сложной установке и т. Д., и т.д.

3) Если это можно сделать, то как?

В настоящее время мои (COM-видимые) заглушки класса начинаются:

namespace SimpleAddinMockup1
{
    /// <summary>
    /// Main entry point from Excel for non-real-time methods.
    /// </summary>
    [ClassInterface(ClassInterfaceType.AutoDual), ComVisible(true)]
    public sealed class Main
    {

    ...
    }
}

и

namespace SimpleAddinMockup1
{
    /// <summary>
    /// In-proc real-time server facade for an Excel instance to our main server connection.
    /// </summary>
    /// Note: to throttle updates in Excel use 'Application.RTD.ThrottleInterval = nnn' for nnn ms between updates (default is 2000).
    /// See: http://msdn.microsoft.com/en-us/library/aa140060(office.10).aspx
    [ClassInterface(ClassInterfaceType.AutoDual), ComVisible(true)]
    public sealed class CPRTDServer : Excel.IRtdServer
    {

    ...

    }
}

Обновление: Мне все равно было бы интересно узнать, легко ли выполнить запуск C # outproc, например, декларативно ...

1 Ответ

2 голосов
/ 16 декабря 2008

Это правда, что с имеющимися в настоящее время версиями CLR (1.0, 1.1 и 2.0) разные версии CLR не могут сосуществовать в одном процессе. Тем не менее, теоретически, пока Excel настроен для загрузки 2.0 CLR, не должно быть никаких проблем с кодом надстройки 1.x и кодом надстройки 2.0. Когда загружается любой код расширения 1.x, он должен автоматически указывать на 2.0 CLR, который обратно совместим.

Было время, когда Excel был подключен к НЕ загружать 2.0 CLR для решения конкретной проблемы совместимости (объяснено на боковой панели в этой статье ), но это было решено с помощью обновления Office ( KB908002 ), который может быть установлен отдельно или с помощью установщика вашей надстройки (и в любом случае должен был быть выдвинут). С этим обновлением Excel должен автоматически загружать последнюю доступную версию CLR.

Текущий план Microsoft заключается в том, что, когда выйдет 4.0 CLR (с VS2010), она сможет сосуществовать в одном процессе с 2.0 CLR, так что, надеюсь, это также не будет проблемой в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...