Как скопировать файл в произвольное место при установке проекта VSIX? - PullRequest
4 голосов
/ 30 сентября 2011

Я разрабатываю расширение Visual Studio 2010 (проект VSIX) для добавления некоторых дополнительных свойств к сущностям в конструкторе Entity Framework. В дополнение к регистрации соответствующих классов для обнаружения MEF, я хотел бы, чтобы включаемый файл T4 был скопирован в папку %ProgramFiles%\ Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes, когда установлено расширение, но я не знаю, как это сделать, а страница свойств VSIX не кажется, показать какой-либо вариант для этого.

Итак, мой вопрос: есть ли способ скопировать данный файл в указанное место при установке проекта VSIX?

1 Ответ

5 голосов
/ 10 апреля 2012

Использование только VSIX, нет, нет.

Все содержимое пакета VSIX во время установки просто распаковывается в локальный каталог расширений - и это КОНЕЦ в отношении установки файлов.

Что бы вы ни копировали в любом месте, вы должны иметь дело с этим вне установщика VSIX. Например - используйте другой установщик. Или, например, при первом запуске вашего плагина где-нибудь в package.Initialize (), проверьте, существуют ли файлы в нужных местах, а если нет - скопируйте их туда.

Конечно, если вы хотите записать в каталог ProgramFiles, у вас есть еще один барьер: защита UAC. Чтобы написать туда, вам понадобится еще один исполняемый файл, который ваш плагин будет запускать с правами возвышения (и запрашивать у пользователя разрешение во время этого и т. Д.), И только он сможет копировать файлы туда. Ну, конечно, если только вы с радостью не предполагаете, что все всегда запускают свои VisualStudios "как администратор" и просто игнорируют UAC и слезы ваших пользователей.

...