Лежание в основе проблемы, которую я пытался решить, должно применить пользовательские привязки клавиш для внутренних дополнительных методов Word VSTO (develiped в C#):
Globals.ThisAddIn.Application.KeyBindings.Add(
Word.WdKeyCategory.wdKeyCategoryCommand,
"MyMethodName",
myKey,
ref _missing,
ref _missing);
Ну, проблема состоит в том, что этот код всегда выдает исключение потому что (Microsoft MSDN): “нет никакого пути (в объектной модели или приложении Word) для привязки с чем-либо кроме макросов VBA”.
То, что другие разработчики пытаются сделать, должно реализовать обходное решение с методом VBA, которые присваивают привязки клавиш обратным вызовам VBA, когда дополнение загружается, и назовите дополнение C# от тех обратных вызовов в свою очередь. (см., как назвать VBA от C# для деталей),
Эта идея имеет шанс для живого:.NET AddIn и VBA-поддерживающий шаблон Word. Но в моем проекте я должен поставить это дополнение в одиночном нажатии Однажды пакет к машинам конечного пользователя (в корпоративной сети, где настройки безопасности не являются проблемой).
Таким образом, Вопрос: как сделать соединение Дополнения C# (Лента) и сценарии VBA в одном пакете развертывания?
У кого-либо есть такой опыт совместно использовать?
Начнем с чего-то более простого:
# z is not yet defined
irb(main):001:0> defined?(z)
=> nil
# Even though the assignment won't execute,
# the mere presence of the assignment statement
# causes z to come to life.
irb(main):002:0> z = 123 if false
=> nil
irb(main):003:0> defined?(z)
=> "local-variable"
irb(main):004:0> z
=> nil
Теперь мы можем найти ваш первый пример.
foo = true unless defined?(foo)
Определено ли foo
? Прежде чем нажать ENTER в irb
, нет. Однако наличие оператора присвоения приводит к тому, что foo
оживает. Это означает, что оператор присвоения не будет выполнен, оставляя foo
в наличии, но имея nil
в качестве его значения. Какое последнее выражение вычисляется в строке irb
? Это , если не определено? (foo)
, что равняется нулю
.
Дополнительные сведения о том, как назначения (даже те, которые не выполняются) вызывают существование переменных, см. в разделе Неоднозначность переменных/методов .
Во втором примере нет ничего загадочного: fooo
не определено, поэтому выполняется код в блоке, устанавливающий fooo
в false
. Это назначение является последним вычисляемым выражением, поэтому false
является возвращаемым значением нашего блока.
Используйте 2.5.2 SDK. Он хорошо работает под Linux, на самом деле.
Я бы также последовал рекомендации для Android, где Linux определенно не является гражданином второго класса.
-121--4903731-И вот мы идем!
Много ручной работы. Но идея состоит в том, чтобы обновить пакет ClickOnce дополнительными зависимостями (редактировать XML манифеста). Стандартная программа установки ClickOnce сделает все остальное для вас.
хммм кажется обходным решением, когда вы можете просто использовать подклассы Windows для непосредственной привязки к сочетанию клавиш.
Я задал ваш вопрос команде разработчиков продукта ClickOnce. Он сказал, что вы можете включить сценарии в развертывание VSTO, и вы можете сделать шаги после развертывания с помощью надстройки VSTO, если вы нацелены на .NET 4.0. Он сказал, что вы также можете сделать это с помощью функций VBA Interop в VSTO. Вы случайно не используете .NET 4.0?