Устранение неполадок в Visual Studio во время разработки
Обновлен: Ноябрь 2007
При разработке решений с использованием Visual Studio Tools for Office могут происходить следующие проблемы.
Ошибка при сохранении решения с последующим его запуском
Visual Studio хранит решения во временной папке до тех пор, пока они не будут сохранены. Visual Studio Tools for Office автоматически изменяет политику безопасности, чтобы предоставлять решению, находящемуся во временной папке, режим доверия. Эти изменения вносятся при разработке решения. Если перед сохранением решения в постоянную папку не вносится никаких изменений, Visual Studio не выполняет построение решения при его запуске из нового расположения. Поэтому решению в новом расположении не может быть автоматически предоставлен режим доверия, и следовательно оно не запускается.
Если ошибка произошла после того, как новое решение было сохранено в постоянное расположение, откройте меню Построить и выберите Перестроить решение. В этом случае Visual Studio выполняет построение решения, даже если в него не вносились никакие изменения. Visual Studio Tools for Office в этом случае вносит соответствующие изменения в политику безопасности для нового расположения.
Невозможно выполнить построение проекта уровня документа, основанного на документе с ограниченными разрешениями
Visual Studio Tools for Office не может выполнить построение проекта уровня документа, основанного на документе с ограниченными разрешениями. Если проект содержит документ с ограниченными решениями, проект не будет компилироваться, и в окне Список ошибок отобразится следующее сообщение.
Не удалось добавить настройку.
Если необходимо добавить документ с ограниченными решениями, при разработке и построении решения используйте документ без ограничений. Затем после публикации решения примените ограниченные разрешения к документу в месте публикации.
При использовании C# некоторые события не вызываются
Объекты Office, имеющие метод и событие с таким же именем, в основных сборках взаимодействия Office разделены на два объекта: основной объект со всеми свойствами и методами и объект события, содержащий события с именами, которые конфликтуют со свойством или методом. Эти объекты событий используют соглашение об именах <objectname>_Event. Если ожидаемое событие не отображается, выполните приведение типов к интерфейсу <objectname>_Event.
Например, для Workbook имеется событие ActivateEvent и метод Activate. Для обработки этого события необходимо использовать WorkbookEvents_Event вместо Workbook.
В разделе объявлений создайте переменные-члены:
private Excel.Workbook wkbk;
private Excel.WorkbookEvents_Event wbEvents;
private Excel.WorkbookEvents_ActivateEventHandler activateEvent;
Подключите событие в _Startup:
wbEvents = (Excel.WorkbookEvents_Event)wkbk;
activateEvent = new Excel.WorkbookEvents_ActivateEventHandler(ThisWorkbook_Activate);
wbEvents.Activate += activateEvent;
Запишите обработчик событий:
private void ThisWorkbook_Activate()
{
// Your code goes here.
}
Затем необходимо выполнить приведение типов к WorkbookEvents_Event, поскольку Excel.Workbook.Activate возвращает метод Activate, но не возвращает событие ActivateEvent.
Также можно привести объект к соответствующему интерфейсу события в Startup:
((Excel.WorkbookEvents_Event)(Globals.ThisWorkbook.InnerObject)).Activate +=
new Excel.WorkbookEvents_ActivateEventHandler(ThisWorkbook_Activate);
Затем необходимо записать обработчик событий для кода:
private void ThisWorkbook_Activate()
{
// Your code goes here.
}
Ссылки на классы Office, которые невозможно распознать
Некоторые имена классов, например Application находятся в разных пространствах имен, таких как Microsoft.Office.Interop.Word и System.Windows.Forms. По этой причине оператор Imports/using вверху шаблонов проекта содержит краткую уточняющую константу, например:
Imports Word = Microsoft.Office.Interop.Word
using Word = Microsoft.Office.Interop.Word;
Для подобного использования оператора Imports/using необходимо разграничивать ссылки на классы Office с квалификатором Word или Excel, например:
Dim doc As Word.Document
Word.Document doc;
Использование неразграниченного объявления приведет к ошибкам, например:
Dim doc As Document ' Class is ambiguous
Document doc; // Class is ambiguous
Даже, несмотря на то, что пространство имен Word или Excel было импортировано, и имеется доступ ко всем классам внутри него, необходимо полностью указать все типы с Word или Excel для устранения неоднозначности в отношении пространства имен.
Свойства элемента управления были утеряны при создании нового проекта, основанного на документе из существующего проекта
При создании нового проекта Visual Studio Tools for Office, основанного на документе из существующего проекта, свойства элементов управления, настроенные для того документа, не копируются в новый проект. Необходимо вручную сбросить свойства для существующих элементов управления. С другой стороны можно сохранить свойства элементов управления, создав копию существующего проекта, вместо того чтобы создавать новый, или загружать существующий проект в новое решение (в режиме конструктора), а затем скопировать и вставить элементы управления из существующего документа в новый.
Элементы управления в документ или листе отображаются в виде черных прямоугольников
Если элементы управления группируются в документе или листе, Visual Studio Tools for Office уже не может их распознать. К сгруппированным элементам управления невозможно получить доступ в окне Свойства, и они отображаются в документе или листе в виде черных прямоугольников. Чтобы восстановить функциональные возможности элементов управления, необходимо их разгруппировать.
Элементы управления шаблона Word не отображаются в Visual Studio.
При открытии шаблона Word в конструкторе Visual Studio элементы управления шаблона, не являющиеся встроенными в текст, могут не быть видимыми. Это происходит потому, что Visual Studio открывает шаблон Word в режиме Обычный. Чтобы отобразить элементы управления, нажмите меню Вид, наведите курсор на Вид Microsoft Office Word и выберите Разметка страницы.
Кэшированные имена набора данных Visual Basic неправильно отображаются в кэше
Объекты DataSet, созданные с помощью Visual Basic и помеченные как Cached и WithEvents (включая объекты DataSet, взятые из окна Источники данных или из окна Панель элементов, для которых значение свойства CacheInDocument установлено на True), содержат подчеркивания в своих именах в кэше. Например, при создании DataSet с именем Customers, имя CachedDataItem в кэше будет выглядеть как _Customers. При использовании ServerDocument для доступа к этому кэшированному элементу следует указывать _Customers вместо Customers.
Ошибки компилятора при названии проекта Microsoft Office 2003 именами Excel или Word
Excel и Word являются зарезервированными ключевыми словами в проектах Office.
Ошибки компилятора при удалении элемента управления NamedRange
Если элемент управления NamedRange удаляется из листа, не являющегося активным листом в конструкторе, автоматически создаваемый код не может быть удален из проекта, что приводит к ошибкам компилятора. Чтобы убедиться в том, что код был удален, перед удалением элемента управления NamedRange, необходимо всегда выбирать лист, содержащий данный элемент управления, чтобы сделать лист активным. Если автоматически создаваемый код не удаляется при удалении элемента управления, можно удалить код в конструкторе, активировав и изменив его, для того чтобы лист был помечен как измененный. При повторном построении проекта код удаляется.
Использование пути HTTP к неработающим сборкам
Существует 2 варианта.
Мастер проектов набора инструментов Visual Studio для Office не изменяет политику безопасности для сборок, созданных в расположениях HTTP. Необходимо вручную предоставить сборке режим полного доверия. Дополнительные сведения см. в разделе Практическое руководство. Предоставление разрешений папкам и сборкам (Система 2003).
ASP.NET отключает загрузку библиотек DLL по умолчанию. Чтобы пользователь мог загрузить сборки, администратор веб-сервера должен изменить свойства IIS, что позволит загружать библиотеки DLL из каталога, в котором хранится сборка. Дополнительные сведения см. в справке по IIS на странице веб-сервера по адресу https://localhost/iisHelp/.
Чтобы проверить наличие ошибки, можно просмотреть журнал веб-сервера на предмет отклоненных запросов загрузки DLL. Если отклоненные запросы не обнаружены, настройте отладчик на прерывание всех исключений и проверьте сообщения об ошибке.
Проекты, созданные в расположениях UNC, автоматически не изменяют политику безопасности
Мастер проектов набора инструментов Visual Studio для Office изменяет политику безопасности на уровне пользователя. При создании проекта в расположении UNC политику безопасности необходимо изменить на уровне компьютера, чтобы предоставить сборке режим полного доверия, перед тем как запустить проект. Изменения в политику безопасности на уровне компьютера вносятся вручную. Дополнительные сведения см. в разделе Практическое руководство. Предоставление разрешений папкам и сборкам (Система 2003).
При открытии документа событие DocumentChange не возникает
Событие DocumentChange возникает при изменении активного документа. Также событие часто возникает при открытии документа. Однако за счет того, что приложение Word может открывать документы разными способами (например, из командной строки, Windows Explorer или из меню "Файл" приложения Word), событие DocumentChange не всегда возникает при открытии документа. Событие всегда отмечается, когда активный документ изменяется после открытия. Если необходимо выполнить какие-либо действия в открытом документе, используйте событие Startup.
Неправильная остановка потоков после отладки
Visual Studio Tools for Office следует правилам соглашения об именах потоков, которые позволяют отладчику правильно закрывать программу. При создании потоков в решении необходимо каждому потоку присваивать имя с префиксом "VSTA_" для правильной обработки при остановке отладки. Например, свойству потока Name, ожидающего сетевого события, можно присвоить имя VSTA_NetworkListener.
События Excel в приложениях Internet Explorer и Excel возникают по-разному
Если книга размещается внутри Internet Explorer, события возникают в другом порядке в отличие от событий книги, открытой в Excel. Помимо этого, некоторые события возникают дважды. Если решение включает Internet Explorer, проверьте, как различная последовательность событий влияет на операции решения.
При создании документа из шаблона новое событие не вызывается
Если открытие шаблона Word и создание нового документа осуществляются с помощью командной строки, необходимо использовать переключатель /z, чтобы возникло событие New. Не ставьте пробел после /z, в противном случае Word откроет шаблон для редактирования вместо создания нового документа, основанного на шаблоне. Например: winword.exe /z"mytemplate.dot".
Принцип работы подобен переключателю /t с той разницей, что переключатель /z вызывает событие New.
При открытии листа XML событие Open не возникает
Если проект Excel основывается на существующем постороннем листе (например, в формате Excel XML), событие Open не возникает при открытии листа.
Метод BeforeClose запускается, а книга при этом остается открытой
Конечный пользователь может отменить закрытие книги и продолжить использовать свое решение после вызова обработчика событий BeforeClose. Это происходит, когда пользователь вносит изменения в лист, а затем закрывает книгу без предварительного сохранения. Вызывается обработчик событий BeforeClose, а затем появляется диалоговое окно, содержащее параметр для отмены закрытия.
Если поместить код в обработчик событий BeforeClose, закрывающий подключения к базе данных или выполняющий другие действия удаления, код можно вызвать во время последующей работы с решением.
При вставке клипа в конструкторе Visual Studio ничего не происходит
После того как пользователь открыл меню Вставка, выбрал в нем Рисунок, а затем Клип, область задач Клип не открывается, если Excel или Word открыты в конструкторе Visual Studio. Чтобы добавить клип с помощью команд меню, необходимо открыть копию книги или документа, находящегося в главной папке проекта (не в папке \bin), вне Visual Studio и добавить клип с последующим сохранением книги или документа.
Невозможно создать проект уровня документа 2003, несмотря на то, что пакет Office 2003 установлен
Эта проблема может произойти, если перед установкой Office 2003 была удалена версия Microsoft Office 2007. При создании проекта настройки уровня документа может появиться следующее сообщение об ошибке:
"На этом компьютере не установлена совместимая версия Microsoft Office."
Чтобы устранить эту проблему, выполните следующие действия.
Закройте Visual Studio.
Откройте соответствующее приложение Microsoft Office, затем закройте приложение. Например, если необходимо создать проект книги Excel 2003, откройте и затем закройте приложение Excel 2003.
Запустите Visual Studio и создайте проект.
Книги Excel недоступны, когда проект настройки уровня документа Excel открыт в Visual Studio
Когда отрывается приложение Excel 2007, и затем в Visual Studio создается проект настройки уровня документа Excel 2007, книга, которая была открыта вначале, перестает отвечать.
Чтобы устранить эту проблему, щелкните лист, отображаемый в конструкторе Visual Studio. Открытая вначале книга снова становится доступной.
См. также
Задачи
Практическое руководство. Развертывание автономного использования документов (2003 System)
Устранение неполадок в Office во время выполнения
Основные понятия
Безопасное развертывание (Система 2003)
Общие задачи программирования Office