Что происходит в Visual Studio 2008 после события после сборки? - PullRequest
1 голос
/ 27 апреля 2009

Я просто создаю решение, которое содержит 3 проекта.

Заказ по сборке

  1. Приложение Silverlight , входящее в / ClientBin проекта веб-приложения ASP.NET

  2. Приложение Windows Form , которое используется для оптимизации всего xap в / ClientBin, когда Visual Studio проходит сборку (событие после сборки).

  3. Веб-приложение ASP.NET , отображающее приложение Silverlight в / ClientBin

При успешной сборке веб-приложения ASP.NET каталог ClientBin в проекте веб-приложения содержит 3 Xap-файла. После этого VS.net запускает событие команды после сборки, которое выполняет приложение Windows Form. Форма Windows оптимизирует все Xap и удаленные файлы 2 Xap из 3 файлов Xap.

Наконец, Vs.net снова скопирует 3 Xap-файла из проекта приложения Silverlight в каталог ClientBin. Зачем? Я не могу найти какой-либо журнал о копировании Xap-файлов после события после сборки (используя многословность вывода сборки проекта MSBuild: Diagnostic)

Target "PostBuildEvent" in file "C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets":
  Task "Exec"
    Command:
    **T:\myProject\Higgs\Higgs\Higgs.Utils.WinApp\bin\Higgs.Utils.WinApp.exe mode=OptimizeXap clientbindir=T:\myProject\Higgs\Higgs\Higgs.Web.UI\ClientBin\ mainxapfilename=Higgs.Silverlight.UI**
  Done executing task "Exec".
Done building target "PostBuildEvent" in project "Higgs.Web.UI.csproj".
Target "CoreBuild" in file "C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets":
  Task "CallTarget" skipped, due to false condition; ('$(UnloadProjectsOnCompletion)'=='true') was evaluated as ('false'=='true').
  Task "CallTarget" skipped, due to false condition; ('$(UnloadProjectsOnCompletion)'=='true') was evaluated as ('false'=='true').
  Task "CallTarget" skipped, due to false condition; ('$(UnloadProjectsOnCompletion)'=='true') was evaluated as ('false'=='true').
Done building target "CoreBuild" in project "Higgs.Web.UI.csproj".
Target "AfterBuild" in file "C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets":
Done building target "AfterBuild" in project "Higgs.Web.UI.csproj".
Target "Build" in file "C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets":
  Building target "Build" completely.
  No input files were specified.
Done building target "Build" in project "Higgs.Web.UI.csproj".
Target "AfterRebuild" in file "C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets":
Done building target "AfterRebuild" in project "Higgs.Web.UI.csproj".
Target "Rebuild" in file "C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets":
  Building target "Rebuild" completely.
  No input files were specified.
Done building target "Rebuild" in project "Higgs.Web.UI.csproj".

Done building project "Higgs.Web.UI.csproj".

Обновление

Я обновил порядок сборки, создав приложение Windows Forms. После сборки веб-приложения. Затем я использую событие пост-сборки приложения Windows Dorm для выполнения его EXE-файла. Все отлично работает Но мне не нравится это решение, потому что оно очень странное для меня.

Ответы [ 3 ]

0 голосов
/ 01 мая 2009

Я не знаю, в чем именно заключается ваша проблема, но если есть какие-то зависимости от ваших проектов, вы должны приказать им построить правильно.

0 голосов
/ 01 мая 2009

Я предполагаю, что проекты ссылаются друг на друга? Итак:

  • ASP.NET Web App ссылается как минимум на приложение SilverLight.
  • Приложение Win Forms ссылается на приложение Silverlight.

Visual Studio автоматически скопирует зависимые файлы в иерархию проекта, если вы не запретите это. поэтому Visual Studio предпримет следующие шаги:

  1. Создание приложения SilverLight и копирование его вывода в приложение Forms и веб-приложение
  2. Запуск любых событий после сборки, определенных на вкладке «Сборка» для проекта приложения SilverLight.
  3. Создайте приложение Win Forms и, если на него ссылается что-либо еще, скопируйте соответствующий вывод.
  4. Запуск любых событий после сборки, определенных на вкладке «Сборка» для проекта приложения Win Forms.
  5. Создание веб-приложения
  6. Запуск любых событий после сборки, определенных на вкладке «Сборка» для проекта Web App.
  7. Запускать любые события «После сборки», определенные с помощью MSBuild.

В основном, большинство зависимых ходов происходят за до событий после постройки:

Task "FindUnderPath"
  Comparison path is "D:\Projects\PublicSites\WebTest".
  Path [...]
  [...]
Done executing task "FindUnderPath".
Task "FindUnderPath"
  Comparison path is "bin\".
  Path [...]
  [...]
Done executing task "FindUnderPath".
Task "FindUnderPath"
  Comparison path is "obj\Debug\".
  Path [...]
  [...]
Done executing task "FindUnderPath".
Task "RemoveDuplicates"
Done executing task "RemoveDuplicates".
Done building target "_CleanGetCurrentAndPriorFileWrites" in project
  "WebTest.csproj".
Target "IncrementalClean" in file 
  "c:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets":
Task "FindUnderPath"
  Comparison path is "bin\".
Done executing task "FindUnderPath".
Task "FindUnderPath"
  Comparison path is "obj\Debug\".
Done executing task "FindUnderPath".
Task "Delete"
Done executing task "Delete".
Task "RemoveDuplicates"
Done executing task "RemoveDuplicates".
Task "WriteLinesToFile"
Done executing task "WriteLinesToFile".
Done building target "IncrementalClean" in project 
  "WebTest.csproj".

Затем происходят события build и AfterBuild.

Я предполагаю, что VS замечает, что вывод приложения SilverLight отличается от версии, под которой он находится, и поэтому отправляет и получает новую копию.

0 голосов
/ 27 апреля 2009

Это не совсем соответствует вашему сценарию, но, к вашему сведению, PostBuildEvent кажется последним шагом в процессе сборки; Вы можете узнать больше о заказе, просмотрев

C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Microsoft.Common.targets

, который показывает логику msbuild.

...