Вопрос по visual-studio-2010 – Цель до и после сборки в Visual Studio не запускается

16

Я делаю следующее:

I have created a default class file project Edited the csproj file to include Pre and Post BuildEvents Uncomment the default commented out BeforeBuild and AfterBuild targets

Цели BeforeBuild и AfterBuild не вызываются формой в Visual Studio, а из командной строки msbuild. Почему?

Я бы предпочел использовать цели msbuild, а не PostBuildEvent, как будто он дает мне больше мощности и гибкости, если он работает.

Ура,

Адам

I shortened some of the paths in the output, so if they are inconsistent that is why

ClassLibrary1.csproj изменения

<code><Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="BeforeBuild">
  <Message Text="### BeforeBuild ###" />
</Target>
<Target Name="AfterBuild">
  <Message Text="### AfterBuild ###" />
</Target>
<PropertyGroup>
  <PreBuildEvent>echo PRE_BUILD</PreBuildEvent>
</PropertyGroup>
<PropertyGroup>
 <PostBuildEvent>echo POST_BUILD</PostBuildEvent>
</PropertyGroup>
</code>

мой вывод сборки из VS 2010

<code>------ Rebuild All started: Project: ClassLibrary1, Configuration: Debug Any CPU ------
PRE_BUILD
ClassLibrary1 -> c:\ClassLibrary1\bin\Debug\ClassLibrary1.dll
POST_BUILD
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
</code>

и из командной строки

<code>#>msbuild ClassLibrary1.sln
Microsoft (R) Build Engine Version 4.0.30319.1
[Microsoft .NET Framework, Version 4.0.30319.239]
Copyright (C) Microsoft Corporation 2007. All rights reserved.

Build started 09/05/2012 13:27:42.
Project "c:.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
  Building solution configuration "Debug|Any CPU".
Project "c:.sln" (1) is building "c:\ClassLibrary1.csproj" (2) on node 1 (default targets).
    BeforeBuild:
      ### BeforeBuild ###
PreBuildEvent:
  echo PRE_BUILD
  PRE_BUILD
GenerateTargetFrameworkMonikerAttribute:
Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.
CoreCompile:
Skipping target "CoreCompile" because all output files are up-to-date with respect to the input files.
CopyFilesToOutputDirectory:
  ClassLibrary1 -> c:\bin\Debug\ClassLibrary1.dll
PostBuildEvent:
  echo POST_BUILD
  POST_BUILD
AfterBuild:
  ### AfterBuild ###
Done Building Project "c:\ClassLibrary1.csproj" (default targets).

Done Building Project "c:.sln" (default targets).

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:00.18
</code>

Ваш Ответ

2   ответа
47

вы просто не видите их в Visual Studio.

По умолчанию VS устанавливает многословность msbuild вminimal, Вы можете показать свое сообщение, изменив важность сообщения наhigh

<Target Name="BeforeBuild">
  <Message Text="### BeforeBuild ###"  Importance="high" />
</Target>
<Target Name="AfterBuild">
  <Message Text="### AfterBuild ###" Importance="high" />
</Target>

Вы также можете изменить настройку многословия в VS в разделе «Инструменты» -> «Параметры», затем в «Проектах и решениях» -> «Построить и запустить».

Error: User Rate Limit Exceeded Adam Straughan
Error: User Rate Limit Exceeded
3

когда они сталкиваются с подобной проблемой, но причина может быть другой. Если у вас есть импорт после цели, то также AfterBuild может не работать.

Make sure all the import you have should be before Target Definition, Target Definition should be at the end

Похожие вопросы