I am doing the following:

  • 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

The BeforeBuild and AfterBuild targets are not called form within Visual Studio but are from msbuild command line, why is that?

I would rather use msbuild targets rather than the PostBuildEvent as if gives me more power and flexibility, assuming it works.

Cheers,

adam

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


ClassLibrary1.csproj changes

<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>

my build output from VS 2010 is

------ 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 ==========

and from the command line

#>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).
    B
Edit
Report