Создание надстройки Excel на основе C # выполняется вне процесса с минимальными затратами

Я разработал прототип надстройки 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, например, декларативно ...

15.12.2008 13:07:42
1 ОТВЕТ
РЕШЕНИЕ

Это правда, что с имеющимися в настоящее время версиями 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, так что, надеюсь, это не будет проблемой в будущем.

2
16.12.2008 00:48:06