Как собрать надстройку Office, не регистрируя ее в системе сборки? - PullRequest
3 голосов
/ 27 февраля 2010

Мы создаем надстройки Office 2007 с помощью Visual Studio 2008. Наши сборки выполняются через сервер непрерывной интеграции (один компьютер), который собирается всякий раз, когда мы регистрируем изменения или запрашиваем их вручную. Сервер может выполнять одновременные сборки.

Мы заметили, что когда Visual Studio 2008 создает надстройку Office 2007, она также регистрирует ее в системе, выполняющей сборку, даже если Office не установлен на сервере интеграции.

Кто-нибудь знает способ запретить Visual Studio 2008 регистрировать надстройку при ее сборке?

1 Ответ

1 голос
/ 27 февраля 2010

Предполагая, что ваш сервер непрерывной интеграции использует MSBuild для сборки надстройки Office 2007, быстрым обходным решением будет выполнение цели сборки, а затем цели VSTOClean.

Этого можно добиться, создав файл проекта MSBuild (master.proj), который управляет процессом сборки, как показано в следующем примере:

<Project 
  DefaultTargets="Build" 
  xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
  <PropertyGroup>
    <WorkingDirectory>C:\BASE_DIR\</WorkingDirectory>
  </PropertyGroup>

  <ItemGroup>
    <VstoProject Include = "$(WorkingDirectory)OfficeAddInProject1.csproj"/>
    <VstoProject Include = "$(WorkingDirectory)OfficeAddInProject1.csproj"/>
  </ItemGroup>

  <Target Name="Build">
    <MSBuild Projects="@(VstoProject)" Targets="Build;VSTOClean" />
  </Target>
</Project>

Обновление: Если после очистки недостаточно, вы можете остановить процесс регистрации, переопределив свойство (VSTO_ProjectType). Для служебной надстройки это свойство имеет значение Приложение , которое заставляет процесс регистрации пройти. Установив его на пользовательское значение, вы отключаете регистрацию. В этих примерах явно указывается, какие проекты создавать, но вы также можете проверить их, указав файл решения. Однако сервер CI должен использовать MSBuild напрямую, а не VS для выполнения сборок.

<Project 
  DefaultTargets="Build" 
  xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
  <PropertyGroup>
    <WorkingDirectory>C:\BASE_DIR\</WorkingDirectory>
  </PropertyGroup>

  <ItemGroup>
    <VstoProject Include = "$(WorkingDirectory)OfficeAddInProject1.csproj"/>
    <VstoProject Include = "$(WorkingDirectory)OfficeAddInProject1.csproj"/>
  </ItemGroup>

  <Target Name="Build">
    <MSBuild 
        Projects="@(VstoProject)" 
        Targets="Build" 
        Properties="VSTO_ProjectType=Custom" />
  </Target>
</Project>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...