2 ***********************************************************************************************
\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
9 Copyright (c) .NET Foundation. All rights reserved.
\r
10 ***********************************************************************************************
\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
19 <UsingTask TaskName="NuGet.Build.Tasks.Pack.PackTask" AssemblyFile="$(NugetTaskAssemblyFile)" />
\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
39 <PropertyGroup Condition="'$(NoBuild)' == 'true' ">
\r
40 <GenerateNuspecDependsOn>$(GenerateNuspecDependsOn)</GenerateNuspecDependsOn>
\r
42 <PropertyGroup Condition="'$(NoBuild)' != 'true' ">
\r
43 <GenerateNuspecDependsOn>Build;$(GenerateNuspecDependsOn)</GenerateNuspecDependsOn>
\r
46 <ProjectCapability Include="Pack"/>
\r
47 <_TargetFrameworks Condition="'$(TargetFramework)' == ''" Include="$(TargetFrameworks.Split(';'))"/>
\r
48 <_TargetFrameworks Condition="'$(TargetFramework)' != ''" Include="$(TargetFramework)"/>
\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
60 ============================================================
\r
63 ============================================================
\r
65 <Target Name="_PackAsBuildAfterTarget"
\r
66 AfterTargets="Build"
\r
67 Condition="'$(GeneratePackageOnBuild)' == 'true' AND '$(IsInnerBuild)' != 'true'"
\r
68 DependsOnTargets="Pack">
\r
71 <Target Name="_CleanPackageFiles"
\r
72 AfterTargets="Clean"
\r
73 Condition="'$(GeneratePackageOnBuild)' == 'true'">
\r
75 <_PackageFilesToDelete Include="$(PackageOutputPath)*.nupkg"/>
\r
76 <_PackageFilesToDelete Include="$(BaseIntermediateOutputPath)*.nuspec"/>
\r
78 <Delete Files="@(_PackageFilesToDelete)"/>
\r
81 <Target Name="_CalculateInputsOutputsForPack">
\r
82 <PropertyGroup Condition="$(ContinuePackingAfterGeneratingNuspec) == '' ">
\r
83 <ContinuePackingAfterGeneratingNuspec>false</ContinuePackingAfterGeneratingNuspec>
\r
86 <PackageOutputPath Condition=" '$(PackageOutputPath)' == '' ">$(OutputPath)</PackageOutputPath>
\r
87 <RestoreOutputPath Condition=" '$(RestoreOutputPath)' == '' " >$(BaseIntermediateOutputPath)</RestoreOutputPath>
\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
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
111 <NuGetPackOutput Include="$(PackageOutputAbsolutePath)$(PackageId).$(PackageVersion).nupkg"
\r
112 Condition="'$(ContinuePackingAfterGeneratingNuspec)' == 'true'"/>
\r
114 <NuGetPackOutput Include="$(PackageOutputAbsolutePath)$(PackageId).$(PackageVersion).symbols.nupkg"
\r
115 Condition="'$(IncludeSource)' == 'true'
\r
116 OR '$(IncludeSymbols)' == 'true'"/>
\r
118 <NuGetPackOutput Include="$(RestoreOutputAbsolutePath)$(PackageId).$(PackageVersion).symbols.nuspec"
\r
119 Condition="'$(IncludeSource)' == 'true'
\r
120 OR '$(IncludeSymbols)' == 'true'"/>
\r
125 ============================================================
\r
127 Main entry point for packing packages
\r
128 ============================================================
\r
130 <Target Name="Pack" DependsOnTargets="_IntermediatePack;$(PackDependsOn)">
\r
132 <Target Name="_IntermediatePack">
\r
134 <ContinuePackingAfterGeneratingNuspec>true</ContinuePackingAfterGeneratingNuspec>
\r
138 <Target Name="GenerateNuspec" DependsOnTargets="$(GenerateNuspecDependsOn);_CalculateInputsOutputsForPack" Condition="$(IsPackable) == 'true'"
\r
139 Inputs="@(NuGetPackInput)" Outputs="@(NuGetPackOutput)">
\r
141 <PackTask PackItem="$(PackProjectInputFile)"
\r
142 PackageFiles="@(_PackageFiles)"
\r
143 PackageFilesToExclude="@(_PackageFilesToExclude)"
\r
144 PackageVersion="$(PackageVersion)"
\r
145 PackageId="$(PackageId)"
\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
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
185 ============================================================
\r
186 _LoadPackGraphEntryPoints
\r
187 Find project entry point and load them into items.
\r
188 ============================================================
\r
190 <Target Name="_LoadPackInputItems">
\r
191 <!-- Allow overriding items with PackProjectInputFile -->
\r
192 <PropertyGroup Condition="'$(PackProjectInputFile)' == ''">
\r
193 <PackProjectInputFile>$(MSBuildProjectFullPath)</PackProjectInputFile>
\r
197 <Target Name="_WalkEachTargetPerFramework">
\r
199 Condition="'$(IncludeBuildOutput)' == 'true'"
\r
200 Projects="$(MSBuildProjectFullPath)"
\r
201 Targets="_GetBuildOutputFilesWithTfm"
\r
202 Properties="TargetFramework=%(_TargetFrameworks.Identity);">
\r
205 TaskParameter="TargetOutputs"
\r
206 ItemName="_BuildOutputInPackage" />
\r
210 Condition="'$(TargetsForTfmSpecificContentInPackage)' != ''"
\r
211 Projects="$(MSBuildProjectFullPath)"
\r
212 Targets="_GetTfmSpecificContentForPackage"
\r
213 Properties="TargetFramework=%(_TargetFrameworks.Identity);">
\r
216 TaskParameter="TargetOutputs"
\r
217 ItemName="_PackageFiles"/>
\r
221 Condition="'$(IncludeSymbols)' == 'true' OR '$(IncludeSource)' == 'true'"
\r
222 Projects="$(MSBuildProjectFullPath)"
\r
223 Targets="_GetDebugSymbolsWithTfm"
\r
224 Properties="TargetFramework=%(_TargetFrameworks.Identity);">
\r
227 TaskParameter="TargetOutputs"
\r
228 ItemName="_TargetPathsToSymbols" />
\r
232 Condition="'$(IncludeSource)' == 'true'"
\r
233 Projects="$(MSBuildProjectFullPath)"
\r
234 Targets="SourceFilesProjectOutputGroup"
\r
235 Properties="TargetFramework=%(_TargetFrameworks.Identity);
\r
236 BuildProjectReferences=false;">
\r
239 TaskParameter="TargetOutputs"
\r
240 ItemName="_SourceFiles" />
\r
244 Projects="$(MSBuildProjectFullPath)"
\r
245 Targets="_GetFrameworkAssemblyReferences"
\r
246 Properties="TargetFramework=%(_TargetFrameworks.Identity);
\r
247 BuildProjectReferences=false;">
\r
250 TaskParameter="TargetOutputs"
\r
251 ItemName="_FrameworkAssemblyReferences" />
\r
255 <Target Name ="_GetFrameworkAssemblyReferences" DependsOnTargets="ResolveReferences" Returns="@(TfmSpecificFrameworkAssemblyReferences)">
\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
264 <Target Name="_GetBuildOutputFilesWithTfm"
\r
265 DependsOnTargets="BuiltProjectOutputGroup;DocumentationProjectOutputGroup;SatelliteDllsProjectOutputGroup;_AddPriFileToPackBuildOutput;$(TargetsForTfmSpecificBuildOutput)"
\r
266 Returns="@(BuildOutputInPackage)">
\r
268 <BuildOutputInPackage Include="@(SatelliteDllsProjectOutputGroupOutput);
\r
269 @(BuiltProjectOutputGroupOutput);
\r
270 @(DocumentationProjectOutputGroupOutput);
\r
271 @(_PathToPriFile)"/>
\r
275 <Target Name="_GetTfmSpecificContentForPackage"
\r
276 DependsOnTargets="$(TargetsForTfmSpecificContentInPackage)"
\r
277 Returns="@(TfmSpecificPackageFile)">
\r
280 <Target Name="_GetDebugSymbolsWithTfm"
\r
281 DependsOnTargets="DebugSymbolsProjectOutputGroup"
\r
282 Returns="@(_TargetPathsToSymbolsWithTfm)">
\r
284 <_TargetPathsToSymbolsWithTfm Include="@(DebugSymbolsProjectOutputGroupOutput)">
\r
285 <TargetFramework>$(TargetFramework)</TargetFramework>
\r
286 </_TargetPathsToSymbolsWithTfm>
\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
305 ============================================================
\r
307 Entry point for generating the project to project references.
\r
308 ============================================================
\r
310 <Target Name="_GetPackageFiles" Condition="$(IncludeContentInPack) == 'true'">
\r
312 <_PackageFilesToExclude Include="@(Content)" Condition="'%(Content.Pack)' == 'false'"/>
\r
314 <!-- Include PackageFiles and Content of the project being packed -->
\r
316 <_PackageFiles Include="@(Content)" Condition=" %(Content.Pack) != 'false' ">
\r
317 <BuildAction>Content</BuildAction>
\r
319 <_PackageFiles Include="@(Compile)" Condition=" %(Compile.Pack) == 'true' ">
\r
320 <BuildAction>Compile</BuildAction>
\r
322 <_PackageFiles Include="@(None)" Condition=" %(None.Pack) == 'true' ">
\r
323 <BuildAction>None</BuildAction>
\r
325 <_PackageFiles Include="@(EmbeddedResource)" Condition=" %(EmbeddedResource.Pack) == 'true' ">
\r
326 <BuildAction>EmbeddedResource</BuildAction>
\r
328 <_PackageFiles Include="@(ApplicationDefinition)" Condition=" %(ApplicationDefinition.Pack) == 'true' ">
\r
329 <BuildAction>ApplicationDefinition</BuildAction>
\r
331 <_PackageFiles Include="@(Page)" Condition=" %(Page.Pack) == 'true' ">
\r
332 <BuildAction>Page</BuildAction>
\r
334 <_PackageFiles Include="@(Resource)" Condition=" %(Resource.Pack) == 'true' ">
\r
335 <BuildAction>Resource</BuildAction>
\r
337 <_PackageFiles Include="@(SplashScreen)" Condition=" %(SplashScreen.Pack) == 'true' ">
\r
338 <BuildAction>SplashScreen</BuildAction>
\r
340 <_PackageFiles Include="@(DesignData)" Condition=" %(DesignData.Pack) == 'true' ">
\r
341 <BuildAction>DesignData</BuildAction>
\r
343 <_PackageFiles Include="@(DesignDataWithDesignTimeCreatableTypes)" Condition=" %(DesignDataWithDesignTimeCreatableTypes.Pack) == 'true' ">
\r
344 <BuildAction>DesignDataWithDesignTimeCreatableTypes</BuildAction>
\r
346 <_PackageFiles Include="@(CodeAnalysisDictionary)" Condition=" %(CodeAnalysisDictionary.Pack) == 'true' ">
\r
347 <BuildAction>CodeAnalysisDictionary</BuildAction>
\r
349 <_PackageFiles Include="@(AndroidAsset)" Condition=" %(AndroidAsset.Pack) == 'true' ">
\r
350 <BuildAction>AndroidAsset</BuildAction>
\r
352 <_PackageFiles Include="@(AndroidResource)" Condition=" %(AndroidResource.Pack) == 'true' ">
\r
353 <BuildAction>AndroidResource</BuildAction>
\r
355 <_PackageFiles Include="@(BundleResource)" Condition=" %(BundleResource.Pack) == 'true' ">
\r
356 <BuildAction>BundleResource</BuildAction>
\r