Регистрация надстроек, шаблонов проектов и шаблонов элементов для Visual Studio 11 - PullRequest
5 голосов
/ 02 апреля 2012

Я использовал Wix 3.5 с WixVSExtension для установки шаблонов элементов проекта для Visual Studio 2010, Visual C # 2010 Express и Visual Web Developer 2010 Express.Теперь я хотел бы добавить поддержку бета-версии Visual Studio 11.

Я добавил поиск в реестре и настраиваемые действия, чтобы найти установочные папки VS11, но при указании структуры каталогов и компонентов я получаю ошибки компиляции, подобные этойone:

ошибка LGHT0204: ICE30: целевой файл 'ewa5nwrn.zip | BasicApplication.zip' установлен в '[TARGETDIR] \ CSharp \' двумя различными компонентами в системе LFN: 'VS2010CSharpProjectTemplates' и 'VS11CSharpProjectTemplates.Это нарушает подсчет ссылок на компоненты.

У меня есть такая структура каталогов:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="VS2010_PROJECTTEMPLATES_DIR">
    <Directory Id="VS2010_PROJECTTEMPLATES_CSHARP_DIR" Name="CSharp">
    </Directory>
  </Directory>
  <Directory Id="VS11_PROJECTTEMPLATES_DIR">
    <Directory Id="VS11_PROJECTTEMPLATES_CSHARP_DIR" Name="CSharp">
    </Directory>
  </Directory>
</Directory>

Обратите внимание, что у меня есть T201G_DROJECTTEMPLATES_DIR и VS11_PROJECTTEMPLATES_DIR внутри TARGETDIR.Сообщение об ошибке показывает, что они игнорируются.

Компоненты определены следующим образом:

<DirectoryRef Id="VS2010_PROJECTTEMPLATES_CSHARP_DIR">
  <Component Id="VS2010CSharpProjectTemplates" Guid="{0976A222-8243-40F2-81AB-84D8F1771840}" Transitive="yes">
    <File Id="VS2010BasicApplication" Source="BasicApplication.zip" />
  </Component>
</DirectoryRef>

<DirectoryRef Id="VS11_PROJECTTEMPLATES_CSHARP_DIR">
  <Component Id="VS11CSharpProjectTemplates" Guid="{A70428F1-AE26-4B07-9F58-D67587B44657}" Transitive="yes">
    <File Id="VS11BasicApplication" Source="BasicApplication.zip" />
  </Component>
</DirectoryRef>

Можно ли установить один и тот же файл в две разные директории, указанные в свойствах?

Заранее спасибо, аальмада

Ответы [ 3 ]

2 голосов
/ 03 апреля 2012

Как объяснено в документации wix элемента Directory : когда вы пропускаете атрибут Name, вы создаете псевдоним для родительского элемента Directory .

Это делается записью "." как имя каталога в базе данных установщика, как описано в документации установщика Windows для таблицы каталогов .

В вашем случае, я полагаю, вы пытаетесь изменить это "." введите реальное имя каталога, задав свойства VS2010_PROJECTTEMPLATES_DIR и VS11_PROJECTTEMPLATES_DIR (поскольку каталоги являются свойствами ) во время установки.

Это нормально, но проблема здесь в том, что компоновщик light не знает, на какие значения вы будете устанавливать эти свойства во время установки. Он имеет только значение атрибута Name для работы. И во время ссылки, похоже, вы устанавливаете один и тот же файл дважды в один и тот же каталог.

Чтобы исправить это, добавьте Name атрибуты с различными значениями заполнителей в элементы каталога VS2010_PROJECTTEMPLATES_DIR и VS11_PROJECTTEMPLATES_DIR.

2 голосов
/ 03 апреля 2012

Я закончил тем, что добавил два базовых каталога в TARGETDIR с установленными свойствами Name:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="VS2010" Name="VS2010">
    <Directory Id="VS2010_PROJECTTEMPLATES_DIR">
      <Directory Id="VS2010_PROJECTTEMPLATES_CSHARP_DIR" Name="CSharp">
      </Directory>
    </Directory>
  </Directory>
  <Directory Id="VS11" Name="VS11">
    <Directory Id="VS11_PROJECTTEMPLATES_DIR">
      <Directory Id="VS11_PROJECTTEMPLATES_CSHARP_DIR" Name="CSharp">
      </Directory>
    </Directory>
  </Directory>
</Directory>

Вот код для свойств (на основе кода WixVSExtension):

<Property Id="VS11DEVENV" Secure="yes">
  <RegistrySearch Id="VS11DevEnvSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentPath" Type="raw"/>
</Property>

<Property Id="VS11_ROOT_FOLDER" Secure="yes">
  <RegistrySearch Id="SearchForVS11RootPath" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" Name="11.0" Type="raw"/>
</Property>

<Property Id="VS11_PROJECTTEMPLATES_DIR" Secure="yes">
  <RegistrySearch Id="VS11DevEnvForProjectTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
    <DirectorySearch Id="VS11ProjectTemplatesPathSearch" Path="ProjectTemplates" Depth="1" />
  </RegistrySearch>
</Property>

<Property Id="VS11_ITEMTEMPLATES_DIR" Secure="yes">
  <RegistrySearch Id="VS11DevEnvForItemTemplatesSearch" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS" Name="EnvironmentDirectory" Type="raw">
    <DirectorySearch Id="VS11ItemTemplatesPathSearch" Path="ItemTemplates" Depth="1" />
  </RegistrySearch>
</Property>

<CustomAction Id="VS11InstallVSTemplates" Property="VS11DEVENV" ExeCommand="/InstallVSTemplates" Execute="deferred" Return="ignore" Impersonate="no" />

Затем я обнаружил, что шаблоны VS2010 неправильно расширяются под VS11, но это уже другой вопрос ...: - /

2 голосов
/ 02 апреля 2012

У меня нет исходного кода для обмена, но я могу рассказать вам, как в целом я делал это в прошлом.

Мы решили «установить» zip-файлы в наш основной каталог приложения.в папке Integration, чтобы файлы всегда были доступны, даже если VS2008 и / или VS2010 не были установлены во время установки.Затем я использовал набор встроенных свойств, которые существуют в расширении Util, и несколько пользовательских запросов RegLocator, чтобы определить набор свойств, связанных с расположением devenv.exe и ItemTemplate, ProjectTemplates и других каталогов, которые нам нужны в .NET.Затем я использовал эти свойства в элементах CopyFile, чтобы MSI дублировал эти файлы в папке Integration в действительные каталоги VS по мере необходимости и оценивал их.Наконец, я использовал настраиваемое действие WiX QuietExec для вызова Devenv / setup для регистрации контента в VS.Я также использовал элемент ProgressText (таблица ActionText), чтобы пользовательский интерфейс выглядел хорошо, хотя все это происходило, поскольку VS devenv может занять некоторое время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...