1 <Project DefaultTargets="Build" InitialTargets="_ValidateEssentialProperties" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
4 <TargetExt Condition="'$(OutputType)' == 'Winexe'">.exe</TargetExt>
5 <TargetExt Condition="'$(OutputType)' == 'Exe'">.exe</TargetExt>
6 <TargetExt Condition="'$(OutputType)' == 'Library'">.dll</TargetExt>
7 <TargetExt Condition="'$(OutputType)' == 'Netmodule'">.netmodule</TargetExt>
11 <ProjectDir Condition="'$(ProjectDir)' == ''">$(MSBuildProjectDirectory)\</ProjectDir>
15 <AssemblyName Condition="'$(AssemblyName)' == ''">$(RootNamespace)</AssemblyName>
16 <OutputPath Condition="'$(OutputPath)' != '' and !HasTrailingSlash('$(OutputPath)')">$(OutputPath)\</OutputPath>
17 <OutputPath Condition=" '$(Platform)'=='' and '$(Configuration)'=='' and '$(OutputPath)'=='' ">bin\Debug\</OutputPath>
18 <WarningLevel Condition="'$(WarningLevel)' == ''" >2</WarningLevel>
22 <OutDir Condition="'$(OutDir)' == ''">$(OutputPath)</OutDir>
23 <OutDir Condition="'$(OutDir)' != '' and !HasTrailingSlash('$(OutDir)')">$(OutDir)\</OutDir>
25 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
26 <ConfigurationName Condition="'$(ConfigurationName)' == ''">$(Configuration)</ConfigurationName>
28 <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
29 <PlatformName Condition="'$(PlatformName)' == ''">$(Platform)</PlatformName>
33 <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)' == ''">obj\</BaseIntermediateOutputPath>
34 <CleanFile Condition="'$(CleanFile)'==''">$(MSBuildProjectFile).FilesWrittenAbsolute.txt</CleanFile>
37 <PropertyGroup Condition="'$(IntermediateOutputPath)' == ''">
38 <IntermediateOutputPath Condition=" '$(PlatformName)' == 'AnyCPU'">$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
39 <IntermediateOutputPath Condition=" '$(PlatformName)' != 'AnyCPU'">$(BaseIntermediateOutputPath)$(PlatformName)\$(Configuration)\</IntermediateOutputPath>
43 <IntermediateAssembly Include="$(IntermediateOutputPath)$(AssemblyName)$(TargetExt)" />
45 <!-- creating this as a item to use FullPath on it, to build TargetPath -->
46 <_OutDirItem Include="$(OutDir)"/>
50 <TargetPath>@(_OutDirItem->'%(FullPath)\$(AssemblyName)$(TargetExt)')</TargetPath>
53 <Target Name="_ValidateEssentialProperties">
54 <!-- If OutDir is specified via the command line, then the earlier check
55 to add a trailing slash won't have any affect, so error here. -->
57 Condition="'$(OutDir)' != '' and !HasTrailingSlash('$(OutDir)')"
58 Text="OutDir property must end with a slash."/>
61 <Target Name="PrepareForBuild">
62 <Message Importance="High" Text="Configuration: $(Configuration) Platform: $(Platform)"/>
65 Directories="$(OutDir);$(IntermediateOutputPath)"
69 <Output TaskParameter="Path" PropertyName="TargetFrameworkPath"/>
74 <AllowedReferenceAssemblyFileExtensions Condition=" '$(AllowedReferenceAssemblyFileExtensions)' == '' ">
77 </AllowedReferenceAssemblyFileExtensions>
79 <AllowedReferenceRelatedFileExtensions Condition=" '$(AllowedReferenceRelatedFileExtensions)' == '' ">
81 </AllowedReferenceRelatedFileExtensions>
83 <AssemblySearchPaths Condition="'$(AssemblySearchPaths)' == ''">
84 {CandidateAssemblyFiles};
86 {TargetFrameworkDirectory};
91 </AssemblySearchPaths>
93 <ResolveReferencesDependsOn>
94 BeforeResolveReferences;
95 ResolveProjectReferences;
96 ResolveAssemblyReferences;
97 AfterResolveReferences
98 </ResolveReferencesDependsOn>
101 <Target Name="ResolveReferences" DependsOnTargets="$(ResolveReferencesDependsOn)"/>
103 <Target Name="BeforeResolveReferences" />
104 <Target Name="AfterResolveReferences" />
106 <Target Name="ResolveAssemblyReferences">
107 <ResolveAssemblyReference
108 Assemblies="@(Reference)"
109 AssemblyFiles="@(ChildProjectReferences)"
110 SearchPaths="$(AssemblySearchPaths)"
111 CandidateAssemblyFiles="@(Content);@(None)"
112 TargetFrameworkDirectories="$(TargetFrameworkPath)"
113 AllowedAssemblyExtensions="$(AllowedReferenceAssemblyFileExtensions)"
114 AllowedRelatedFileExtensions="$(AllowedReferenceRelatedFileExtensions)"
115 FindDependencies="true"
116 FindSatellites="true"
117 FindRelatedFiles="true"
119 <Output TaskParameter="ResolvedFiles" ItemName="ResolvedFiles"/>
120 <Output TaskParameter="ResolvedFiles" ItemName="ReferencePath"/>
121 <Output TaskParameter="ResolvedDependencyFiles" ItemName="_ResolveAssemblyReferenceResolvedFiles"/>
122 <Output TaskParameter="RelatedFiles" ItemName="_ReferenceRelatedPaths"/>
123 <Output TaskParameter="SatelliteFiles" ItemName="ReferenceSatellitePaths"/>
124 <Output TaskParameter="CopyLocalFiles" ItemName="ReferenceCopyLocalPaths"/>
125 </ResolveAssemblyReference>
129 Name="AssignProjectConfigurations"
130 Condition="'@(ProjectReference)' != ''">
132 <!-- assign configs if building a solution file -->
133 <AssignProjectConfiguration
134 ProjectReferences = "@(ProjectReference)"
135 SolutionConfigurationContents = "$(CurrentSolutionConfigurationContents)"
136 Condition="'$(BuildingSolutionFile)' == 'true'">
138 <Output TaskParameter = "AssignedProjects" ItemName = "ProjectReferenceWithConfiguration"/>
139 </AssignProjectConfiguration>
142 <CreateItem Include="@(ProjectReference)" Condition="'$(BuildingSolutionFile)' != 'true'">
143 <Output TaskParameter="Include" ItemName="ProjectReferenceWithConfiguration"/>
150 Name="ResolveProjectReferences"
151 DependsOnTargets="AssignProjectConfigurations"
153 <!-- If building from a .sln.proj or from IDE, then referenced projects have already
154 been built, so just get the target paths -->
156 Projects="@(ProjectReferenceWithConfiguration)"
157 Targets="GetTargetPath"
158 Properties="%(ProjectReferenceWithConfiguration.SetConfiguration); %(ProjectReferenceWithConfiguration.SetPlatform)"
159 Condition="'@(ProjectReferenceWithConfiguration)' != '' and ('$(BuildingSolutionFile)' == 'true' or '$(BuildingInsideVisualStudio)' == 'true')">
161 <Output TaskParameter="TargetOutputs" ItemName="ChildProjectReferences" />
164 <!-- Building a project directly, build the referenced the projects also -->
166 Projects="@(ProjectReferenceWithConfiguration)"
167 Properties="%(ProjectReferenceWithConfiguration.SetConfiguration); %(ProjectReferenceWithConfiguration.SetPlatform)"
168 Condition="'@(ProjectReferenceWithConfiguration)' != '' and '$(BuildingSolutionFile)' != 'true' and '$(BuildingInsideVisualStudio)' != 'true' ">
170 <Output TaskParameter="TargetOutputs" ItemName="ChildProjectReferences" />
174 <Target Name = "CopyFilesMarkedCopyLocal">
176 SourceFiles="@(ReferenceCopyLocalPaths)"
177 DestinationFiles="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')"
178 SkipUnchangedFiles="true">
179 <Output TaskParameter = "DestinationFiles" ItemName = "FileWrites"/>
184 Not needed at the moment
185 <Target Name="_ComputeNonExistentFileProperty" Condition='false'>
186 <CreateProperty Value="__NonExistentSubDir__\__NonExistentFile__">
187 <Output TaskParameter="Value" PropertyName="NonExistentFile"/>
194 _ValidateEssentialProperties;
201 <Target Name="BeforeBuild"/>
202 <Target Name="AfterBuild"/>
204 <Target Name="Build" DependsOnTargets="$(BuildDependsOn)" Outputs="$(TargetPath)"/>
211 CopyFilesMarkedCopyLocal;
218 </CoreBuildDependsOn>
223 DependsOnTargets="$(CoreBuildDependsOn)"
224 Outputs="$(OutDir)$(AssemblyName)$(TargetExt)">
226 <OnError ExecuteTargets="_TimestampAfterCompile;PostBuildEvent"
227 Condition=" '$(RunPostBuildEvent)' == 'Always' or '$(RunPostBuildEvent)' == 'OnOutputUpdated'"/>
234 _TimestampBeforeCompile;
236 _TimestampAfterCompile;
241 <Target Name="BeforeCompile" />
242 <Target Name="AfterCompile" />
244 <Target Name="Compile" DependsOnTargets="$(CompileDependsOn)"/>
247 <PrepareForRunDependsOn>
249 </PrepareForRunDependsOn>
251 <Target Name="PrepareForRun" DependsOnTargets="$(PrepareForRunDependsOn)"/>
253 <Target Name="BuildResources"
254 DependsOnTargets="AssignTargetPaths;SplitResourcesByCulture;CreateManifestResourceNames;CopyNonResxEmbeddedResources;GenerateResources;GenerateSatelliteAssemblies">
257 <Target Name="SplitResourcesByCulture" DependsOnTargets="AssignTargetPaths">
258 <AssignCulture Files="@(EmbeddedResourceWithTargetPath)">
259 <Output TaskParameter="AssignedFilesWithNoCulture" ItemName="ResourcesWithNoCulture"/>
260 <Output TaskParameter="AssignedFilesWithCulture" ItemName="ResourcesWithCulture"/>
263 <CreateItem Include="@(ResourcesWithNoCulture)" Condition="'%(Extension)' == '.resx'">
264 <Output TaskParameter="Include" ItemName="ResxWithNoCulture"/>
267 <CreateItem Include="@(ResourcesWithNoCulture)" Condition="'%(Extension)' != '.resx'">
268 <Output TaskParameter="Include" ItemName="NonResxWithNoCulture"/>
271 <CreateItem Include="@(ResourcesWithCulture)" Condition="'%(Extension)' == '.resx'">
272 <Output TaskParameter="Include" ItemName="ResxWithCulture"/>
275 <CreateItem Include="@(ResourcesWithCulture)" Condition="'%(Extension)' != '.resx'">
276 <Output TaskParameter="Include" ItemName="NonResxWithCulture"/>
280 <!-- Copy non-resx resources to their manifest resource names, this is what the compiler expects -->
281 <Target Name = "CopyNonResxEmbeddedResources"
282 Condition = "'@(NonResxWithCulture)' != '' or '@(NonResxWithNoCulture)' != '' or '@(ManifestNonResxWithCulture)' != '' or '@(ManifestNonResxWithNoCulture)' != ''">
284 <MakeDir Directories="$(IntermediateOutputPath)%(ManifestNonResxWithCulture.Culture)"/>
285 <Copy SourceFiles = "@(NonResxWithCulture)"
286 DestinationFiles = "@(ManifestNonResxWithCulture->'$(IntermediateOutputPath)%(Identity)')"
287 SkipUnchangedFiles="true">
288 <Output TaskParameter = "DestinationFiles" ItemName = "ManifestNonResxWithCultureOnDisk"/>
289 <Output TaskParameter = "DestinationFiles" ItemName = "FileWrites"/>
292 <Copy SourceFiles = "@(NonResxWithNoCulture)"
293 DestinationFiles = "@(ManifestNonResxWithNoCulture->'$(IntermediateOutputPath)%(Identity)')"
294 SkipUnchangedFiles="true">
295 <Output TaskParameter = "DestinationFiles" ItemName = "ManifestNonResxWithNoCultureOnDisk"/>
296 <Output TaskParameter = "DestinationFiles" ItemName = "FileWrites"/>
300 <Target Name = "GenerateResources">
302 Sources = "@(ResxWithNoCulture)"
303 UseSourcePath = "true"
304 OutputResources = "@(ManifestResourceWithNoCultureName->'$(IntermediateOutputPath)%(Identity).resources')"
305 Condition = "'@(ResxWithNoCulture)' != '' ">
307 <Output TaskParameter = "OutputResources" ItemName = "ManifestResourceWithNoCulture"/>
308 <Output TaskParameter = "FilesWritten" ItemName = "FileWrites"/>
312 Sources = "@(ResxWithCulture)"
313 UseSourcePath = "true"
314 OutputResources = "@(ManifestResourceWithCultureName->'$(IntermediateOutputPath)%(Identity).resources')"
315 Condition = "'@(ResxWithCulture)' != '' ">
317 <Output TaskParameter = "OutputResources" ItemName = "ManifestResourceWithCulture"/>
318 <Output TaskParameter = "FilesWritten" ItemName = "FileWrites"/>
322 <Target Name="GenerateSatelliteAssemblies"
323 Inputs="@(ManifestResourceWithCulture);@(ManifestNonResxWithCultureOnDisk)"
324 Outputs="$(IntermediateOutputPath)%(Culture)\$(AssemblyName).resources.dll" >
325 <!-- @(NonResxWithCulture) - rename files to ManifestNon.. and then use for AL -->
326 <MakeDir Directories = "$(IntermediateOutputPath)%(ManifestResourceWithCulture.Culture)" Condition = "'@(ManifestResourceWithCulture)' != ''" />
327 <MakeDir Directories = "$(IntermediateOutputPath)%(ManifestNonResxWithCultureOnDisk.Culture)" Condition = "'@(ManifestNonResxWithCultureOnDisk)' != ''" />
330 Culture = "%(Culture)"
331 EmbedResources = "@(ManifestResourceWithCulture);@(ManifestNonResxWithCultureOnDisk)"
332 OutputAssembly = "$(IntermediateOutputPath)%(Culture)\$(AssemblyName).resources.dll" >
333 <Output TaskParameter="OutputAssembly" ItemName="FileWrites"/>
338 Include = "$(IntermediateOutputPath)%(Culture)\$(AssemblyName).resources.dll"
339 AdditionalMetadata = "Culture=%(Culture)"
340 Condition = "'@(ManifestResourceWithCulture)' != '' or '@(ManifestNonResxWithCultureOnDisk)' != ''">
341 <Output TaskParameter = "Include" ItemName = "IntermediateSatelliteAssemblies" />
345 <!-- Assign target paths to files that will need to be copied along with the project -->
346 <Target Name = "AssignTargetPaths">
347 <AssignTargetPath Files="@(None)" RootFolder="$(MSBuildProjectDirectory)">
348 <Output TaskParameter="AssignedFiles" ItemName="NoneWithTargetPath"/>
351 <AssignTargetPath Files="@(Content)" RootFolder="$(MSBuildProjectDirectory)">
352 <Output TaskParameter="AssignedFiles" ItemName="ContentWithTargetPath"/>
355 <AssignTargetPath Files="@(EmbeddedResource)" RootFolder="$(MSBuildProjectDirectory)">
356 <Output TaskParameter="AssignedFiles" ItemName="EmbeddedResourceWithTargetPath"/>
360 <Target Name="DeployOutputFiles"
361 DependsOnTargets="BuildResources;CoreCompile;_CopyDeployFilesToOutputDirectory">
364 SourceFiles="$(IntermediateOutputPath)$(AssemblyName)$(TargetExt).mdb"
365 Condition="Exists('$(IntermediateOutputPath)$(AssemblyName)$(TargetExt).mdb')"
366 DestinationFolder="$(OutDir)"
367 SkipUnchangedFiles="true" >
368 <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
371 <Copy SourceFiles="@(IntermediateAssembly)" DestinationFolder="$(OutDir)" SkipUnchangedFiles="true">
372 <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
376 SourceFiles = "@(IntermediateSatelliteAssemblies)"
377 DestinationFiles = "@(IntermediateSatelliteAssemblies->'$(OutDir)\%(Culture)\$(AssemblyName).resources.dll')"
378 Condition = "'@(IntermediateSatelliteAssemblies)' != ''"
379 SkipUnchangedFiles="true">
380 <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
384 <Target Name="_CopyDeployFilesToOutputDirectory"
385 DependsOnTargets="GetCopyToOutputDirectoryItems;
386 _CopyDeployFilesToOutputDirectoryToOutputDirectoryAlways;
387 CopyDeployFilesToOutputDirectoryPreserveNewest"/>
389 <Target Name="CopyDeployFilesToOutputDirectoryPreserveNewest"
390 Condition="'@(ItemsToCopyToOutputDirectoryPreserveNewest)' != ''"
391 Inputs="@(ItemsToCopyToOutputDirectoryPreserveNewest)"
392 Outputs="@(ItemsToCopyToOutputDirectoryPreserveNewest->'$(OutDir)%(TargetPath)')">
394 <Copy SourceFiles="@(ItemsToCopyToOutputDirectoryPreserveNewest)"
395 DestinationFiles="@(ItemsToCopyToOutputDirectoryPreserveNewest->'$(OutDir)%(TargetPath)')">
396 <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
400 <!-- Copy if newer -->
401 <Target Name="_CopyDeployFilesToOutputDirectoryToOutputDirectoryAlways"
402 Condition="'@(ItemsToCopyToOutputDirectoryAlways)' != ''">
404 <Copy SourceFiles="@(ItemsToCopyToOutputDirectoryAlways)"
405 DestinationFiles="@(ItemsToCopyToOutputDirectoryAlways->'$(OutDir)%(TargetPath)')">
406 <Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
410 <Target Name="GetTargetPath" Outputs="$(TargetPath)"/>
412 <Target Name="GetCopyToOutputDirectoryItems"
413 Outputs="@(AllItemsFullPathWithTargetPath)"
414 DependsOnTargets="AssignTargetPaths">
416 <!-- FIXME: handle .vcproj -->
418 Projects="@(ProjectReference)"
419 Targets="GetCopyToOutputDirectoryItems"
420 Condition="'@(ProjectReference)' != ''">
422 <Output TaskParameter="TargetOutputs" ItemName="AllChildProjectItemsWithTargetPath"/>
425 <!-- Process items from child project. The outputs need to have full path
426 as they'll be used from other projects -->
429 Include="@(AllChildProjectItemsWithTargetPath->'%(FullPath)')"
430 Condition="'%(AllChildProjectItemsWithTargetPath.CopyToOutputDirectory)' == 'Always' or '%(AllChildProjectItemsWithTargetPath.CopyToOutputDirectory)' == 'PreserveNewest'">
432 <Output TaskParameter="Include" ItemName="AllItemsFullPathWithTargetPath"/>
433 <Output TaskParameter="Include" ItemName="ItemsToCopyToOutputDirectoryAlways"
434 Condition="'%(AllChildProjectItemsWithTargetPath.CopyToOutputDirectory)'=='Always'"/>
435 <Output TaskParameter="Include" ItemName="ItemsToCopyToOutputDirectoryPreserveNewest"
436 Condition="'%(AllChildProjectItemsWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'"/>
440 <!-- Process _this_ project's items -->
443 Include="@(NoneWithTargetPath->'%(FullPath)')"
444 Condition="'%(NoneWithTargetPath.CopyToOutputDirectory)' == 'Always' or '%(NoneWithTargetPath.CopyToOutputDirectory)' == 'PreserveNewest'">
445 <Output TaskParameter="Include" ItemName="AllItemsFullPathWithTargetPath"/>
446 <Output TaskParameter="Include" ItemName="ItemsToCopyToOutputDirectoryAlways"
447 Condition="'%(NoneWithTargetPath.CopyToOutputDirectory)'=='Always'"/>
448 <Output TaskParameter="Include" ItemName="ItemsToCopyToOutputDirectoryPreserveNewest"
449 Condition="'%(NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'"/>
453 Include="@(ContentWithTargetPath->'%(FullPath)')"
454 Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)' == 'Always' or '%(ContentWithTargetPath.CopyToOutputDirectory)' == 'PreserveNewest'">
455 <Output TaskParameter="Include" ItemName="AllItemsFullPathWithTargetPath"/>
456 <Output TaskParameter="Include" ItemName="ItemsToCopyToOutputDirectoryAlways"
457 Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='Always'"/>
458 <Output TaskParameter="Include" ItemName="ItemsToCopyToOutputDirectoryPreserveNewest"
459 Condition="'%(ContentWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'"/>
463 Include="@(EmbeddedResourceWithTargetPath->'%(FullPath)')"
464 Condition="'%(EmbeddedResourceWithTargetPath.CopyToOutputDirectory)' == 'Always' or '%(EmbeddedResourceWithTargetPath.CopyToOutputDirectory)' == 'PreserveNewest'">
465 <Output TaskParameter="Include" ItemName="AllItemsFullPathWithTargetPath"/>
466 <Output TaskParameter="Include" ItemName="ItemsToCopyToOutputDirectoryAlways"
467 Condition="'%(EmbeddedResourceWithTargetPath.CopyToOutputDirectory)'=='Always'"/>
468 <Output TaskParameter="Include" ItemName="ItemsToCopyToOutputDirectoryPreserveNewest"
469 Condition="'%(EmbeddedResourceWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'"/>
474 <!-- Pre/Post BuildEvents -->
476 <PreBuildEventDependsOn />
479 <Target Name="PreBuildEvent"
480 Condition="'$(PreBuildEvent)' != ''"
481 DependsOnTargets="$(PreBuildEventDependsOn)">
483 <Exec WorkingDirectory="$(OutDir)" Command="$(PreBuildEvent)" />
486 <!-- PostBuildEvent depends on $(RunPostBuildEvent)
488 Default: OnBuildSuccess
489 OnBuildSuccess: Run after a successful build
490 OnOutputUpdated: Run only if the output assembly got updates
494 <PostBuildEventDependsOn />
497 <!-- this gets invoked in two cases, from CoreBuildDependsOn, if the build completes
498 successfully, OR from OnError in CoreBuild, if the build failed and $(RunPostBuildEvent)
499 is 'Always' or 'OnOutputUpdated' -->
500 <Target Name="PostBuildEvent"
501 Condition="'$(PostBuildEvent)' != '' and
502 ('$(RunPostBuildEvent)' == 'Always' or '$(RunPostBuildEvent)' == 'OnBuildSuccess' or
503 ('$(RunPostBuildEvent)' == 'OnOutputUpdated' and
504 '$(_AssemblyModifiedTimeBeforeCompile)' != '$(_AssemblyModifiedTimeAfterCompile)')
506 DependsOnTargets="$(PostBuildEventDependsOn)">
508 <Exec WorkingDirectory="$(OutDir)" Command="$(PostBuildEvent)" />
511 <!-- Timestamp the output assemblies, required for PostBuildEvent -->
512 <Target Name="_TimestampBeforeCompile" Condition="'$(RunPostBuildEvent)' == 'OnOutputUpdated'">
513 <CreateItem Include="%(IntermediateAssembly.ModifiedTime)">
514 <Output TaskParameter="Include" PropertyName="_AssemblyModifiedTimeBeforeCompile" />
517 <Target Name="_TimestampAfterCompile" Condition="'$(RunPostBuildEvent)' == 'OnOutputUpdated'">
518 <CreateItem Include="%(IntermediateAssembly.ModifiedTime)">
519 <Output TaskParameter="Include" PropertyName="_AssemblyModifiedTimeAfterCompile" />
528 $(MSBuildProjectDefaultTargets);
532 <RebuildDependsOn Condition="'$(MSBuildProjectDefaultTargets)' == 'Rebuild'">
540 <Target Name="BeforeRebuild" />
541 <Target Name="AfterRebuild" />
543 <Target Name="Rebuild"
544 DependsOnTargets="$(RebuildDependsOn)"
545 Outputs="$(TargetPath)"/>
548 <Target Name="_RecordCleanFile"
549 DependsOnTargets="_GetCompileOutputsForClean">
551 File="$(BaseIntermediateOutputPath)$(CleanFile)"
552 Lines="@(FileWrites->'%(FullPath)')"
559 CleanReferencedProjects;
565 <Target Name="_GetCompileOutputsForClean">
566 <CreateItem Include="@(IntermediateAssembly)" Condition="Exists('@(IntermediateAssembly)')">
567 <Output TaskParameter="Include" ItemName="FileWrites"/>
570 <CreateItem Include="$(IntermediateOutputPath)$(AssemblyName)$(TargetExt).mdb"
571 Condition="Exists('$(IntermediateOutputPath)$(AssemblyName)$(TargetExt).mdb')">
572 <Output TaskParameter="Include" ItemName="FileWrites"/>
576 <!-- Get the list of files written, for clean -->
577 <Target Name="_GetCleanFileWrites"
578 DependsOnTargets="_GetCompileOutputsForClean">
579 <ReadLinesFromFile File="$(BaseIntermediateOutputPath)$(CleanFile)">
580 <Output TaskParameter="Lines" ItemName="FileWrites"/>
584 <Target Name="CleanReferencedProjects"
585 DependsOnTargets="AssignProjectConfigurations">
587 <!-- If building from .sln.proj or from IDE, clean will get handled by them,
588 else we are building a project directly, from the command line, so
589 clean the referenced projects -->
590 <MSBuild Projects="@(ProjectReferenceWithConfiguration)"
592 Condition=" '$(BuildingSolutionFile)' != 'true' and '$(BuildingInsideVisualStudio)' != 'true' and '@(ProjectReferenceWithConfiguration)' != ''" />
596 <Target Name="Clean" DependsOnTargets="$(CleanDependsOn)"/>
598 <!-- Override in project to run before/after clean tasks -->
599 <Target Name="BeforeClean" />
600 <Target Name="AfterClean" />
602 <Target Name="CoreClean" DependsOnTargets="_GetCleanFileWrites">
603 <Delete Files="@(FileWrites)" TreatErrorsAsWarnings="true"/>