@@ -16,7 +16,7 @@ When extending the solution build, chain off one of these
1616
1717  <Target  Name =" Package" DependsOnTargets =" PackageProjects;PackSharedSources" 
1818
19-   <Target  Name =" Test" 
19+   <Target  Name =" Test" DependsOnTargets = " TestProjects "   />
2020
2121  <Target  Name =" Verify" DependsOnTargets =" VerifyPackages" 
2222
@@ -54,32 +54,58 @@ as they are subject to change.
5454Targets: {Target}Solutions 
5555
5656Items: Solutions 
57+ Properties: ExcludeSolutions 
5758
5859Executes /t:{Target} on all solutions 
5960################################################################### 
6061--> 
61-   <Target  Name =" CleanSolutions" 
62+   <PropertyGroup >
63+     <_SolutionWasBuilt >false</_SolutionWasBuilt >
64+     <!--  ensure its value doesn't invalidate MSBuild build cache --> 
65+     <_BuildPropertiesToRemove >$(_BuildPropertiesToRemove);_SolutionWasBuilt</_BuildPropertiesToRemove >
66+ 
67+     <BuildInParallel >true</BuildInParallel >
68+   </PropertyGroup >
69+ 
70+   <Target  Name =" _GetSolutions" Condition =" '$(Solutions)'==''" 
71+     <ItemGroup >
72+       <Solutions  Include =" $(RepositoryRoot)\*.sln" Exclude =" $(ExcludeSolutions)" 
73+     </ItemGroup >
74+   </Target >
75+ 
76+   <Target  Name =" CleanSolutions" DependsOnTargets =" _GetSolutions" 
6277    <MSBuild  Targets =" Clean" 
6378      Projects =" @(Solutions)" 
6479      Properties =" Configuration=$(Configuration)" 
6580  </Target >
6681
67-   <Target  Name =" RestoreSolutions" 
82+   <Target  Name =" RestoreSolutions"   DependsOnTargets = " _GetSolutions " 
6883    <MSBuild  Targets =" Restore" 
6984      Projects =" @(Solutions)" 
7085      Properties =" Configuration=$(Configuration)" 
7186  </Target >
7287
73-   <Target  Name =" BuildSolutions" 
88+   <Target  Name =" BuildSolutions"   DependsOnTargets = " _GetSolutions " 
7489    <MSBuild  Targets =" Build" 
7590      Projects =" @(Solutions)" 
76-       Properties =" Configuration=$(Configuration)" 
91+       Properties =" Configuration=$(Configuration)" 
92+       BuildInParallel =" $(BuildInParallel)" 
93+       RemoveProperties =" $(_BuildPropertiesToRemove)" 
94+ 
95+     <PropertyGroup >
96+       <_SolutionWasBuilt >true</_SolutionWasBuilt >
97+     </PropertyGroup >
7798  </Target >
7899
79-   <Target  Name =" RebuildSolutions" 
100+   <Target  Name =" RebuildSolutions"   DependsOnTargets = " _GetSolutions " 
80101    <MSBuild  Targets =" Rebuild" 
81102      Projects =" @(Solutions)" 
82-       Properties =" Configuration=$(Configuration)" 
103+       Properties =" Configuration=$(Configuration)" 
104+       RemoveProperties =" $(_BuildPropertiesToRemove)" 
105+ 
106+     <PropertyGroup >
107+       <_SolutionWasBuilt >true</_SolutionWasBuilt >
108+     </PropertyGroup >
83109  </Target >
84110
85111<!-- 
@@ -96,9 +122,15 @@ Executes /t:Pack on all projects matching src/*/*.csproj.
96122      <ProjectsToPack  Condition =" '$(ProjectsToPack)' == ''" Include =" $(RepositoryRoot)src\*\*.csproj" 
97123    </ItemGroup >
98124
125+     <PropertyGroup >
126+       <PackageNoBuild  Condition =" '$(PackageNoBuild)' == ''" PackageNoBuild >
127+     </PropertyGroup >
128+ 
99129    <MSBuild  Targets =" Pack" 
100130      Projects =" @(ProjectsToPack)" 
101-       Properties =" Configuration=$(Configuration);PackageOutputPath=$(BuildDir);NoBuild=true" 
131+       Properties =" Configuration=$(Configuration);PackageOutputPath=$(BuildDir);NoBuild=$(PackageNoBuild)" 
132+       BuildInParallel =" $(BuildInParallel)" 
133+       RemoveProperties =" $(_BuildPropertiesToRemove);PackageNoBuild" 
102134  </Target >
103135
104136<!-- 
@@ -125,9 +157,54 @@ that matches "$(RepositoryRoot)/shared/*.Sources".
125157    <MSBuild  Targets =" Pack" 
126158      Projects =" $(MSBuildThisFileDirectory)..\shared\sharedsources.csproj" 
127159      Properties =" PackageOutputPath=$(BuildDir);RepositoryRoot=$(RepositoryRoot);NuspecBasePath=%(SharedSourceDirectories.Identity);PackageId=%(FileName)%(Extension)" 
128-       Condition =" '@(SharedSourceDirectories)'!=''" 
160+       Condition =" '@(SharedSourceDirectories)'!=''" 
161+       BuildInParallel =" $(BuildInParallel)" 
162+   </Target >
163+ 
164+ <!-- 
165+ ################################################################### 
166+ Target: TestProjects 
167+ 
168+ Items: TestProjects. Defaults to test/*/*.csproj 
169+ Properties: ExcludeFromTest. ItemSpec for projects to avoid testing. 
170+ 
171+ Runs the VSTest on all projects in the TestProjects itemgroup. 
172+ ################################################################### 
173+ --> 
174+ 
175+   <PropertyGroup >
176+     <!--  TODO if VS Test doesn't make minimal output the default log setting, we can set that here. cref https://github.com/Microsoft/vstest/issues/301 --> 
177+     <VSTestLogger  Condition ="  '$(VSTestLogger)'=='' AND '$(TEAMCITY_VERSION)' != '' " VSTestLogger >
178+     <IgnoreFailingTestProjects >false</IgnoreFailingTestProjects >
179+     <ContinueOnTestError  Condition =" '$(KOREBUILD_IGNORE_DOTNET_TEST_EXIT_CODE)' == '1'" ContinueOnTestError >
180+   </PropertyGroup >
181+ 
182+   <Target  Name =" TestProjects" 
183+ 
184+     <ItemGroup  Condition =" '@(TestProjects)'==''" 
185+       <!--  put unit test projects ahead of functional tests --> 
186+       <TestProjects  Include =" $(RepositoryRoot)test\*\*.Tests.csproj" Exclude =" $(ExcludeFromTest)" 
187+       <TestProjects  Include =" $(RepositoryRoot)test\*\*.Test.csproj" Exclude =" $(ExcludeFromTest)" 
188+       <TestProjects  Include =" $(RepositoryRoot)test\*\*.csproj" Exclude =" @(TestProjects);$(ExcludeFromTest)" 
189+     </ItemGroup >
190+ 
191+     <PropertyGroup >
192+       <VSTestNoBuild  Condition =" '$(VSTestNoBuild)' == ''" VSTestNoBuild >
193+       <_TestContinueOnError  Condition =" '$(IgnoreFailingTestProjects)' == 'true'" _TestContinueOnError >
194+       <_TestContinueOnError  Condition =" '$(IgnoreFailingTestProjects)' != 'true'" _TestContinueOnError >
195+     </PropertyGroup >
196+ 
197+     <!--  Intentional use of batching ('%') instead of passing items ('@') so that tests fail sooner --> 
198+     <MSBuild  Projects =" %(TestProjects.Identity)" 
199+       Targets =" VSTest" 
200+       Properties =" Configurationf=$(Configuration);VSTestLogger=$(VSTestLogger);VSTestNoBuild=$(VSTestNoBuild)" 
201+       Condition =" '@(TestProjects)'!=''" 
202+       ContinueOnError =" $(_TestContinueOnError)" 
203+       RemoveProperties =" $(_BuildPropertiesToRemove);_TestContinueOnError" 
204+ 
129205  </Target >
130206
207+ 
131208<!-- 
132209################################################################### 
133210Target: VerifyPackages 
0 commit comments