35d6d57c20984f46b270526a045c077c0bb5d8ad
[platform/core/dotnet/build-tools.git] /
1 <!--\r
2 ***********************************************************************************************\r
3 NuGet.targets\r
4 \r
5 WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have\r
6           created a backup copy.  Incorrect changes to this file will make it\r
7           impossible to load or build your projects from the command-line or the IDE.\r
8 \r
9 Copyright (c) .NET Foundation. All rights reserved.\r
10 ***********************************************************************************************\r
11 -->\r
12 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
13   <!-- Load NuGet.Build.Tasks.Pack.dll, this can be overridden to use a different version with $(NugetTaskAssemblyFile) -->\r
14   <PropertyGroup Condition="$(NugetTaskAssemblyFile) == ''">\r
15     <NugetTaskAssemblyFile Condition="'$(MSBuildRuntimeType)' == 'Core'">..\CoreCLR\NuGet.Build.Tasks.Pack.dll</NugetTaskAssemblyFile>\r
16     <NugetTaskAssemblyFile Condition="'$(MSBuildRuntimeType)' != 'Core'">..\Desktop\NuGet.Build.Tasks.Pack.dll</NugetTaskAssemblyFile>\r
17     <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>\r
18   </PropertyGroup>\r
19   <UsingTask TaskName="NuGet.Build.Tasks.Pack.PackTask" AssemblyFile="$(NugetTaskAssemblyFile)" />\r
20 \r
21   <PropertyGroup>\r
22     <PackageId Condition=" '$(PackageId)' == '' ">$(AssemblyName)</PackageId>\r
23     <PackageVersion Condition=" '$(PackageVersion)' == '' ">$(Version)</PackageVersion>\r
24     <IncludeContentInPack Condition="'$(IncludeContentInPack)'==''">true</IncludeContentInPack>\r
25     <GenerateNuspecDependsOn>_LoadPackInputItems; _WalkEachTargetPerFramework; _GetPackageFiles; $(GenerateNuspecDependsOn)</GenerateNuspecDependsOn>\r
26     <Description Condition="'$(Description)'==''">Package Description</Description>\r
27     <IsPackable Condition="'$(IsPackable)'=='' AND '$(IsTestProject)'=='true'">false</IsPackable>\r
28     <IsPackable Condition="'$(IsPackable)'==''">true</IsPackable>\r
29     <IncludeBuildOutput Condition="'$(IncludeBuildOutput)'==''">true</IncludeBuildOutput>\r
30     <BuildOutputTargetFolder Condition="'$(BuildOutputTargetFolder)' == '' AND '$(IsTool)' == 'true'">tools</BuildOutputTargetFolder>\r
31     <BuildOutputTargetFolder Condition="'$(BuildOutputTargetFolder)' == ''">lib</BuildOutputTargetFolder>\r
32     <ContentTargetFolders Condition="'$(ContentTargetFolders)' == ''">content;contentFiles</ContentTargetFolders>\r
33     <PackDependsOn>GenerateNuspec; $(PackDependsOn)</PackDependsOn>\r
34     <IsInnerBuild Condition="'$(TargetFramework)' != '' AND '$(TargetFrameworks)' != ''">true</IsInnerBuild>\r
35     <NoBuild Condition="'$(GeneratePackageOnBuild)' == 'true'">true</NoBuild>\r
36     <AddPriFileDependsOn Condition="'$(MicrosoftPortableCurrentVersionPropsHasBeenImported)' == 'true'">DeterminePortableBuildCapabilities</AddPriFileDependsOn>\r
37     <ImportNuGetBuildTasksPackTargetsFromSdk Condition="'$(ImportNuGetBuildTasksPackTargetsFromSdk)' == ''">false</ImportNuGetBuildTasksPackTargetsFromSdk>\r
38   </PropertyGroup>\r
39   <PropertyGroup Condition="'$(NoBuild)' == 'true' ">\r
40     <GenerateNuspecDependsOn>$(GenerateNuspecDependsOn)</GenerateNuspecDependsOn>\r
41   </PropertyGroup>\r
42   <PropertyGroup Condition="'$(NoBuild)' != 'true' ">\r
43     <GenerateNuspecDependsOn>Build;$(GenerateNuspecDependsOn)</GenerateNuspecDependsOn>\r
44   </PropertyGroup>\r
45   <ItemGroup>\r
46     <ProjectCapability Include="Pack"/>\r
47     <_TargetFrameworks Condition="'$(TargetFramework)' == ''" Include="$(TargetFrameworks.Split(';'))"/>\r
48     <_TargetFrameworks Condition="'$(TargetFramework)' != ''" Include="$(TargetFramework)"/>\r
49   </ItemGroup>\r
50   <ItemDefinitionGroup>\r
51     <BuildOutputInPackage>\r
52       <TargetFramework>$(TargetFramework)</TargetFramework>\r
53     </BuildOutputInPackage>\r
54     <TfmSpecificPackageFile>\r
55       <BuildAction>None</BuildAction>\r
56     </TfmSpecificPackageFile>\r
57   </ItemDefinitionGroup>\r
58 \r
59   <!--\r
60     ============================================================\r
61     Pack\r
62     Post Build Target\r
63     ============================================================\r
64   -->\r
65   <Target Name="_PackAsBuildAfterTarget"\r
66           AfterTargets="Build" \r
67           Condition="'$(GeneratePackageOnBuild)' == 'true' AND '$(IsInnerBuild)' != 'true'"\r
68           DependsOnTargets="Pack">\r
69   </Target>\r
70 \r
71   <Target Name="_CleanPackageFiles"\r
72           AfterTargets="Clean"\r
73           Condition="'$(GeneratePackageOnBuild)' == 'true'">\r
74     <ItemGroup>\r
75       <_PackageFilesToDelete Include="$(PackageOutputPath)*.nupkg"/>\r
76       <_PackageFilesToDelete Include="$(BaseIntermediateOutputPath)*.nuspec"/>\r
77     </ItemGroup>\r
78     <Delete Files="@(_PackageFilesToDelete)"/>\r
79   </Target>\r
80 \r
81   <Target Name="_CalculateInputsOutputsForPack">\r
82     <PropertyGroup Condition="$(ContinuePackingAfterGeneratingNuspec) == '' ">\r
83       <ContinuePackingAfterGeneratingNuspec>false</ContinuePackingAfterGeneratingNuspec>\r
84     </PropertyGroup>\r
85     <PropertyGroup>\r
86       <PackageOutputPath Condition=" '$(PackageOutputPath)' == '' ">$(OutputPath)</PackageOutputPath>\r
87       <RestoreOutputPath Condition=" '$(RestoreOutputPath)' == '' " >$(BaseIntermediateOutputPath)</RestoreOutputPath>\r
88     </PropertyGroup>\r
89     \r
90     <ConvertToAbsolutePath Paths="$(RestoreOutputPath)">\r
91       <Output TaskParameter="AbsolutePaths" PropertyName="RestoreOutputAbsolutePath" />\r
92     </ConvertToAbsolutePath>\r
93     <ConvertToAbsolutePath Paths="$(PackageOutputPath)">\r
94       <Output TaskParameter="AbsolutePaths" PropertyName="PackageOutputAbsolutePath" />\r
95     </ConvertToAbsolutePath>\r
96     <ConvertToAbsolutePath Condition="$(NuspecFile) != ''" Paths="$(NuspecFile)">\r
97       <Output TaskParameter="AbsolutePaths" PropertyName="NuspecFileAbsolutePath" />\r
98     </ConvertToAbsolutePath>\r
99 \r
100     <ItemGroup>\r
101       <!--This catches changes to properties-->\r
102       <NuGetPackInput Include="$(MSBuildAllProjects)"/>\r
103       <NuGetPackInput Include="@(_PackageFiles)"/>\r
104       <NuGetPackInput Include="@(_PackageFilesToExclude)"/>\r
105       <NuGetPackInput Include="@(_BuildOutputInPackage->'%(FinalOutputPath)')"/>\r
106       <NuGetPackInput Include="@(_TargetPathsToSymbols->'%(FinalOutputPath)')"/>\r
107       <NuGetPackInput Include="@(_SourceFiles)"/>\r
108       <NuGetPackInput Include="@(_References)"/>\r
109       <NuGetPackOutput Include="$(RestoreOutputAbsolutePath)$(PackageId).$(PackageVersion).nuspec"/>\r
110 \r
111       <NuGetPackOutput Include="$(PackageOutputAbsolutePath)$(PackageId).$(PackageVersion).nupkg" \r
112                        Condition="'$(ContinuePackingAfterGeneratingNuspec)' == 'true'"/>\r
113 \r
114       <NuGetPackOutput Include="$(PackageOutputAbsolutePath)$(PackageId).$(PackageVersion).symbols.nupkg"\r
115                        Condition="'$(IncludeSource)' == 'true'\r
116                                OR '$(IncludeSymbols)' == 'true'"/>\r
117 \r
118       <NuGetPackOutput Include="$(RestoreOutputAbsolutePath)$(PackageId).$(PackageVersion).symbols.nuspec"\r
119                        Condition="'$(IncludeSource)' == 'true'\r
120                              OR '$(IncludeSymbols)' == 'true'"/>\r
121     </ItemGroup>\r
122   </Target>\r
123   \r
124   <!--\r
125     ============================================================\r
126     Pack\r
127     Main entry point for packing packages\r
128     ============================================================\r
129   -->\r
130   <Target Name="Pack" DependsOnTargets="_IntermediatePack;$(PackDependsOn)">\r
131   </Target>\r
132   <Target Name="_IntermediatePack">\r
133     <PropertyGroup>\r
134       <ContinuePackingAfterGeneratingNuspec>true</ContinuePackingAfterGeneratingNuspec>\r
135     </PropertyGroup>\r
136   </Target>\r
137   \r
138   <Target Name="GenerateNuspec" DependsOnTargets="$(GenerateNuspecDependsOn);_CalculateInputsOutputsForPack" Condition="$(IsPackable) == 'true'"\r
139           Inputs="@(NuGetPackInput)" Outputs="@(NuGetPackOutput)">\r
140     <!-- Call Pack -->\r
141     <PackTask PackItem="$(PackProjectInputFile)"\r
142               PackageFiles="@(_PackageFiles)"\r
143               PackageFilesToExclude="@(_PackageFilesToExclude)"\r
144               PackageVersion="$(PackageVersion)"\r
145               PackageId="$(PackageId)"\r
146               Title="$(Title)"\r
147               Authors="$(Authors)"\r
148               Description="$(Description)"\r
149               Copyright="$(Copyright)"\r
150               RequireLicenseAcceptance="$(PackageRequireLicenseAcceptance)"\r
151               LicenseUrl="$(PackageLicenseUrl)"\r
152               ProjectUrl="$(PackageProjectUrl)"\r
153               IconUrl="$(PackageIconUrl)"\r
154               ReleaseNotes="$(PackageReleaseNotes)"\r
155               Tags="$(PackageTags)"\r
156               DevelopmentDependency="$(DevelopmentDependency)"\r
157               BuildOutputInPackage="@(_BuildOutputInPackage)"\r
158               TargetPathsToSymbols="@(_TargetPathsToSymbols)"\r
159               TargetFrameworks="@(_TargetFrameworks)"\r
160               AssemblyName="$(AssemblyName)"\r
161               PackageOutputPath="$(PackageOutputAbsolutePath)"\r
162               IncludeSymbols="$(IncludeSymbols)"\r
163               IncludeSource="$(IncludeSource)"\r
164               PackageTypes="$(PackageType)"\r
165               IsTool="$(IsTool)"\r
166               RepositoryUrl="$(RepositoryUrl)"\r
167               RepositoryType="$(RepositoryType)"\r
168               SourceFiles="@(_SourceFiles->Distinct())"\r
169               NoPackageAnalysis="$(NoPackageAnalysis)"\r
170               MinClientVersion="$(MinClientVersion)"\r
171               Serviceable="$(Serviceable)"\r
172               FrameworkAssemblyReferences="@(_FrameworkAssemblyReferences)"\r
173               ContinuePackingAfterGeneratingNuspec="$(ContinuePackingAfterGeneratingNuspec)"\r
174               NuspecOutputPath="$(BaseIntermediateOutputPath)"\r
175               IncludeBuildOutput="$(IncludeBuildOutput)"\r
176               BuildOutputFolder="$(BuildOutputTargetFolder)"\r
177               ContentTargetFolders="$(ContentTargetFolders)"\r
178               RestoreOutputPath="$(RestoreOutputAbsolutePath)"\r
179               NuspecFile="$(NuspecFileAbsolutePath)"\r
180               NuspecBasePath="$(NuspecBasePath)"\r
181               NuspecProperties="$(NuspecProperties)"/>\r
182   </Target>\r
183   \r
184   <!--\r
185     ============================================================\r
186     _LoadPackGraphEntryPoints\r
187     Find project entry point and load them into items.\r
188     ============================================================\r
189   -->\r
190   <Target Name="_LoadPackInputItems">\r
191     <!-- Allow overriding items with PackProjectInputFile -->\r
192     <PropertyGroup Condition="'$(PackProjectInputFile)' == ''">\r
193       <PackProjectInputFile>$(MSBuildProjectFullPath)</PackProjectInputFile>\r
194     </PropertyGroup>\r
195   </Target>\r
196 \r
197   <Target Name="_WalkEachTargetPerFramework">\r
198     <MSBuild\r
199       Condition="'$(IncludeBuildOutput)' == 'true'"\r
200       Projects="$(MSBuildProjectFullPath)"\r
201       Targets="_GetBuildOutputFilesWithTfm"\r
202       Properties="TargetFramework=%(_TargetFrameworks.Identity);">\r
203 \r
204       <Output\r
205           TaskParameter="TargetOutputs"\r
206           ItemName="_BuildOutputInPackage" />\r
207     </MSBuild>\r
208     \r
209     <MSBuild\r
210       Condition="'$(TargetsForTfmSpecificContentInPackage)' != ''"\r
211       Projects="$(MSBuildProjectFullPath)"\r
212       Targets="_GetTfmSpecificContentForPackage"\r
213       Properties="TargetFramework=%(_TargetFrameworks.Identity);">\r
214       \r
215     <Output\r
216         TaskParameter="TargetOutputs"\r
217         ItemName="_PackageFiles"/>\r
218     </MSBuild>\r
219 \r
220     <MSBuild\r
221       Condition="'$(IncludeSymbols)' == 'true' OR '$(IncludeSource)' == 'true'"\r
222       Projects="$(MSBuildProjectFullPath)"\r
223       Targets="_GetDebugSymbolsWithTfm"\r
224       Properties="TargetFramework=%(_TargetFrameworks.Identity);">\r
225 \r
226       <Output\r
227           TaskParameter="TargetOutputs"\r
228           ItemName="_TargetPathsToSymbols" />\r
229     </MSBuild>\r
230 \r
231     <MSBuild\r
232       Condition="'$(IncludeSource)' == 'true'"\r
233       Projects="$(MSBuildProjectFullPath)"\r
234       Targets="SourceFilesProjectOutputGroup"\r
235       Properties="TargetFramework=%(_TargetFrameworks.Identity);\r
236                   BuildProjectReferences=false;">\r
237 \r
238       <Output\r
239           TaskParameter="TargetOutputs"\r
240           ItemName="_SourceFiles" />\r
241     </MSBuild>\r
242 \r
243     <MSBuild\r
244       Projects="$(MSBuildProjectFullPath)"\r
245       Targets="_GetFrameworkAssemblyReferences"\r
246       Properties="TargetFramework=%(_TargetFrameworks.Identity);\r
247                   BuildProjectReferences=false;">\r
248 \r
249       <Output\r
250           TaskParameter="TargetOutputs"\r
251           ItemName="_FrameworkAssemblyReferences" />\r
252     </MSBuild>\r
253   </Target>\r
254 \r
255   <Target Name ="_GetFrameworkAssemblyReferences" DependsOnTargets="ResolveReferences" Returns="@(TfmSpecificFrameworkAssemblyReferences)">\r
256     <ItemGroup>\r
257       <TfmSpecificFrameworkAssemblyReferences Include="@(ReferencePath->'%(OriginalItemSpec)')" \r
258       Condition="'%(ReferencePath.Pack)' != 'false' AND '%(ReferencePath.ResolvedFrom)' == '{TargetFrameworkDirectory}'">\r
259         <TargetFramework>$(TargetFramework)</TargetFramework>\r
260       </TfmSpecificFrameworkAssemblyReferences>\r
261     </ItemGroup>\r
262   </Target>\r
263   \r
264   <Target Name="_GetBuildOutputFilesWithTfm"\r
265           DependsOnTargets="BuiltProjectOutputGroup;DocumentationProjectOutputGroup;SatelliteDllsProjectOutputGroup;_AddPriFileToPackBuildOutput;$(TargetsForTfmSpecificBuildOutput)"\r
266           Returns="@(BuildOutputInPackage)">\r
267     <ItemGroup>\r
268       <BuildOutputInPackage Include="@(SatelliteDllsProjectOutputGroupOutput);\r
269                             @(BuiltProjectOutputGroupOutput);\r
270                             @(DocumentationProjectOutputGroupOutput);\r
271                             @(_PathToPriFile)"/>\r
272     </ItemGroup>\r
273   </Target>\r
274   \r
275   <Target Name="_GetTfmSpecificContentForPackage"\r
276           DependsOnTargets="$(TargetsForTfmSpecificContentInPackage)"\r
277           Returns="@(TfmSpecificPackageFile)">\r
278   </Target>\r
279 \r
280   <Target Name="_GetDebugSymbolsWithTfm"\r
281           DependsOnTargets="DebugSymbolsProjectOutputGroup"\r
282           Returns="@(_TargetPathsToSymbolsWithTfm)">\r
283     <ItemGroup>\r
284       <_TargetPathsToSymbolsWithTfm Include="@(DebugSymbolsProjectOutputGroupOutput)">\r
285         <TargetFramework>$(TargetFramework)</TargetFramework>\r
286       </_TargetPathsToSymbolsWithTfm>\r
287     </ItemGroup>\r
288   </Target>\r
289   \r
290   <!--Projects with target framework like UWP, Win8, wpa81 produce a Pri file\r
291     in their bin dir. This Pri file is not included in the BuiltProjectGroupOutput, and\r
292     has to be added manually here.-->\r
293   <Target Name="_AddPriFileToPackBuildOutput"\r
294           Returns="@(_PathToPriFile)"\r
295           DependsOnTargets="$(AddPriFileDependsOn)">\r
296     <ItemGroup Condition="'$(IncludeProjectPriFile)' == 'true'">\r
297       <_PathToPriFile Include="$(ProjectPriFullPath)">\r
298         <FinalOutputPath>$(ProjectPriFullPath)</FinalOutputPath>\r
299         <TargetPath>$(ProjectPriFileName)</TargetPath>\r
300       </_PathToPriFile>\r
301     </ItemGroup>\r
302   </Target>\r
303 \r
304   <!--\r
305     ============================================================\r
306     _GetPackageFiles\r
307     Entry point for generating the project to project references.\r
308     ============================================================\r
309   -->\r
310   <Target Name="_GetPackageFiles" Condition="$(IncludeContentInPack) == 'true'">\r
311     <ItemGroup>\r
312       <_PackageFilesToExclude Include="@(Content)" Condition="'%(Content.Pack)' == 'false'"/>\r
313     </ItemGroup>\r
314     <!-- Include PackageFiles and Content of the project being packed -->\r
315     <ItemGroup>\r
316       <_PackageFiles Include="@(Content)" Condition=" %(Content.Pack) != 'false' ">\r
317         <BuildAction>Content</BuildAction>\r
318       </_PackageFiles>\r
319       <_PackageFiles Include="@(Compile)" Condition=" %(Compile.Pack) == 'true' ">\r
320         <BuildAction>Compile</BuildAction>\r
321       </_PackageFiles>\r
322       <_PackageFiles Include="@(None)" Condition=" %(None.Pack) == 'true' ">\r
323         <BuildAction>None</BuildAction>\r
324       </_PackageFiles>\r
325       <_PackageFiles Include="@(EmbeddedResource)" Condition=" %(EmbeddedResource.Pack) == 'true' ">\r
326         <BuildAction>EmbeddedResource</BuildAction>\r
327       </_PackageFiles>\r
328       <_PackageFiles Include="@(ApplicationDefinition)" Condition=" %(ApplicationDefinition.Pack) == 'true' ">\r
329         <BuildAction>ApplicationDefinition</BuildAction>\r
330       </_PackageFiles>\r
331       <_PackageFiles Include="@(Page)" Condition=" %(Page.Pack) == 'true' ">\r
332         <BuildAction>Page</BuildAction>\r
333       </_PackageFiles>\r
334       <_PackageFiles Include="@(Resource)" Condition=" %(Resource.Pack) == 'true' ">\r
335         <BuildAction>Resource</BuildAction>\r
336       </_PackageFiles>\r
337       <_PackageFiles Include="@(SplashScreen)" Condition=" %(SplashScreen.Pack) == 'true' ">\r
338         <BuildAction>SplashScreen</BuildAction>\r
339       </_PackageFiles>\r
340       <_PackageFiles Include="@(DesignData)" Condition=" %(DesignData.Pack) == 'true' ">\r
341         <BuildAction>DesignData</BuildAction>\r
342       </_PackageFiles>\r
343       <_PackageFiles Include="@(DesignDataWithDesignTimeCreatableTypes)" Condition=" %(DesignDataWithDesignTimeCreatableTypes.Pack) == 'true' ">\r
344         <BuildAction>DesignDataWithDesignTimeCreatableTypes</BuildAction>\r
345       </_PackageFiles>\r
346       <_PackageFiles Include="@(CodeAnalysisDictionary)" Condition=" %(CodeAnalysisDictionary.Pack) == 'true' ">\r
347         <BuildAction>CodeAnalysisDictionary</BuildAction>\r
348       </_PackageFiles>\r
349       <_PackageFiles Include="@(AndroidAsset)" Condition=" %(AndroidAsset.Pack) == 'true' ">\r
350         <BuildAction>AndroidAsset</BuildAction>\r
351       </_PackageFiles>\r
352       <_PackageFiles Include="@(AndroidResource)" Condition=" %(AndroidResource.Pack) == 'true' ">\r
353         <BuildAction>AndroidResource</BuildAction>\r
354       </_PackageFiles>\r
355       <_PackageFiles Include="@(BundleResource)" Condition=" %(BundleResource.Pack) == 'true' ">\r
356         <BuildAction>BundleResource</BuildAction>\r
357       </_PackageFiles>\r
358     </ItemGroup>\r
359   </Target>\r
360 </Project>\r