Есть ли способ заставить установку ClickOnce установить LoadBehavoir в «0» для надстройки VSTO - PullRequest
0 голосов
/ 14 ноября 2018

У меня проблемы с поведением загрузки надстройки ленты Excel, разработанной как решение VSTO.Надстройка служит в качестве элемента управления ленты VSTO в Excel, который имеет несколько вкладок, видимость каждой вкладки по умолчанию установлена ​​на false и становится видимой экземпляром надстройки рабочей книги.

По неясным для меня причинам, разрешающимустановка ClickOnce для установки LoadBehavior на 16 (затем на последующие 9) проблематична.Исходное значение 16 правильно загрузит вкладку ленты книги, но после закрытия и повторного открытия этой книги вкладка ленты не отображается.

Однако, если другая книга открыта с той же надстройкой, обе вкладки появляются в каждой из книг.

LoadBehavior «0» работает так, как задумано, и является причинойза размещенный вопрос.

Вот код VBA для создания экземпляра надстройки.

'This loads the Ribbon Addin
Private Function LoadAddIn() As Boolean
    On Error GoTo Err_LoadAddIn
    Dim msg As String
    Dim m_addIn As COMAddIn
    Dim m_automationObject As Object
    Dim m_sWorkbookKey As String    

    msg = "Unable to load the PITA AddIn, please contact PITA support"

    'Load the Excel Addin
    Set m_addIn = Application.COMAddIns("PITA Ribbon")
    'Connect the COM Add-In to the current workbook
    m_addIn.Connect = True

    'Set a reference to the utility class that the COM Add-In references
    m_automationObject = m_addIn.Object
    'If it is nothing then the Add-In is in a bad state
    If m_automationObject Is Nothing Then
        msg = "Error loading the PITA AddIn, please contact PITA support"
        GoTo Err_LoadAddIn
    Else
        'Set the service type of the Add-In (currently only SQLServer)
        m_automationObject.SetDataConnection "SQLServer"
        'Set the workbook key - this is the name of the analyzer
        m_sWorkbookKey = Worksheets("SheetX").Range("A10")

        'Set the ribbon tab's visibility relative to the current workbook
        m_automationObject.SetTabVisibility m_sWorkbookKey, True

        'If the connection to the datasource is successful
        'Populate the Tab's List Controls with the values from SQL Server
        If m_automationObject.Connected = True Then
            m_automationObject.SetTabDefaults m_sWorkbookKey
        End If
    End If

    LoadAddIn = True
    Exit Function

Err_LoadAddIn:
    MsgBox msg, vbCritical, "AddIn load error"
    LoadAddIn = False
End Function

Я попытался изменить файл манифеста VSTO в разделе настройки ниже на «0», но установщик ClickOnce выдает ошибку, когдапопытка установки с этой модификацией.

    <vstov4:customization>
      <vstov4:appAddIn application="Excel" loadBehavior="0" keyName="PITA Ribbon">
        <vstov4:friendlyName>PITA Ribbon</vstov4:friendlyName>
        <vstov4:description>PITA Ribbon</vstov4:description>
        <vstov4.1:ribbonTypes xmlns:vstov4.1="urn:schemas-microsoft-com:vsto.v4.1">
          <vstov4.1:ribbonType name="PITAAddIn.PITARibbon, PITA Ribbon, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
        </vstov4.1:ribbonTypes>
      </vstov4:appAddIn>
    </vstov4:customization>

Есть ли способ, чтобы установка ClickOnce установила поведение загрузки по умолчанию на "0"?

Любое руководство о том, как это сделать, оченьоценили!

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Вопрос, заданный Крисом в разделе комментариев в первоначальной публикации, определяет основную проблему (т. Е. Повторно подписали развертывание после изменения loadBehavior на 0?)

После изменения файла манифеста дляНадстройка, необходимо заново подписать манифест и сборку.

Инструкции по изменению свойств развертывания VSTO адресуются здесь

Инструкции по повторной подписи сборок и манифестов развертывания адресуются здесь

Создание самозаверяющих сертификатов можно выполнить с помощью PowerShell. Это ссылка , которую я использовал для создания сертификата для подписи кода для тестовой среды.

Мои шаги были следующими:

  • Создание нового сертификата для подписи кода с помощью PowerShell.Комски предоставляет отличную командную строку пример .
  • После публикации надстройки VSTO внесите изменения в манифест сборки надстройки с помощью LoadBehavior в 0
  • . Используйте MAGE.EXE, чтобы подписать манифест mage.exe -sign "PITA Ribbon.dll.manifest -CertFile "C:\Certificates\cert.pfx -Password ******** -a sha256RSA
  • ИспользованиеMAGE.EXE для обновления манифеста развертывания VSTO mage.exe -update "C:\PitaDeploy\Pita Ribbon.vsto" -appmanifiest "Pita Ribbon.dll.manifest" -CertFile "C:\Certificates\cert.pfx -Password ******* -a sha256RSA

После выполнения этих шагов VSTO установлен без проблем.

0 голосов
/ 27 ноября 2018

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

Документация MSDN

В одном из моих ответов есть скрипт powershell, который автоматизирует это

...