03b62de381804ac4823a7782d6fba8a57a73e6ff
[platform/core/dotnet/build-tools.git] /
1 <!--\r
2 ***********************************************************************************************\r
3 Microsoft.PackageDependencyResolution.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 \r
14   <!--\r
15     *************************************\r
16     1. INPUT PROPERTIES\r
17     - That configure the PackageDependency targets\r
18     *************************************\r
19     -->\r
20 \r
21   <!-- General Properties -->\r
22   <PropertyGroup>\r
23     <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>\r
24   </PropertyGroup>\r
25 \r
26   <!-- Project Assets File -->\r
27   <PropertyGroup>\r
28     <ProjectAssetsFile Condition="'$(ProjectAssetsFile)' == ''">$(BaseIntermediateOutputPath)/project.assets.json</ProjectAssetsFile>\r
29   </PropertyGroup>\r
30 \r
31   <PropertyGroup>\r
32     <!-- Ensure $(ProjectAssetsFile) is a full path -->\r
33     <ProjectAssetsFile Condition="'$([System.IO.Path]::IsPathRooted($(ProjectAssetsFile)))' != 'true'">$([System.IO.Path]::GetFullPath($([System.IO.Path]::Combine('$(MSBuildProjectDirectory)', '$(ProjectAssetsFile)'))))</ProjectAssetsFile>\r
34   </PropertyGroup>\r
35 \r
36   <PropertyGroup>\r
37     <ResolvePackageDependenciesForBuild Condition="'$(ResolvePackageDependenciesForBuild)' == ''">true</ResolvePackageDependenciesForBuild>\r
38     <CopyLocalLockFileAssemblies Condition="'$(CopyLocalLockFileAssemblies)' == ''">true</CopyLocalLockFileAssemblies>\r
39 \r
40     <ContentPreprocessorOutputDirectory Condition="'$(ContentPreprocessorOutputDirectory)' == ''">$(IntermediateOutputPath)NuGet\</ContentPreprocessorOutputDirectory>\r
41     <ProduceOnlyPreprocessorFilesInBuildTask Condition="'$(ProduceOnlyPreprocessorFilesInBuildTask)' == ''">true</ProduceOnlyPreprocessorFilesInBuildTask>\r
42 \r
43     <UseTargetPlatformAsNuGetTargetMoniker Condition="'$(UseTargetPlatformAsNuGetTargetMoniker)' == '' AND '$(TargetFrameworkMoniker)' == '.NETCore,Version=v5.0'">true</UseTargetPlatformAsNuGetTargetMoniker>\r
44     <NuGetTargetMoniker Condition="'$(NuGetTargetMoniker)' == '' AND '$(UseTargetPlatformAsNuGetTargetMoniker)' == 'true'">$(TargetPlatformIdentifier),Version=v$([System.Version]::Parse('$(TargetPlatformMinVersion)').ToString(3))</NuGetTargetMoniker>\r
45     <NuGetTargetMoniker Condition="'$(NuGetTargetMoniker)' == '' AND '$(UseTargetPlatformAsNuGetTargetMoniker)' != 'true'">$(TargetFrameworkMoniker)</NuGetTargetMoniker>\r
46 \r
47     <EmitAssetsLogMessages Condition="'$(EmitAssetsLogMessages)' == ''">true</EmitAssetsLogMessages>\r
48   </PropertyGroup>\r
49 \r
50   <!-- Target Moniker + RID-->\r
51   <PropertyGroup Condition="'$(_NugetTargetMonikerAndRID)' == ''">\r
52     <_NugetTargetMonikerAndRID Condition="'$(RuntimeIdentifier)' == ''">$(NuGetTargetMoniker)</_NugetTargetMonikerAndRID>\r
53     <_NugetTargetMonikerAndRID Condition="'$(RuntimeIdentifier)' != ''">$(NuGetTargetMoniker)/$(RuntimeIdentifier)</_NugetTargetMonikerAndRID>\r
54   </PropertyGroup>\r
55 \r
56   <!--\r
57     *************************************\r
58     2. EXTERNAL PROPERTIES and ITEMS\r
59     - Override or add to external targets\r
60     *************************************\r
61     -->\r
62 \r
63   <PropertyGroup>\r
64     <ResolveAssemblyReferencesDependsOn>\r
65       $(ResolveAssemblyReferencesDependsOn);\r
66       ResolvePackageDependenciesForBuild;\r
67       _HandlePackageFileConflicts;\r
68     </ResolveAssemblyReferencesDependsOn>\r
69 \r
70     <PrepareResourcesDependsOn>\r
71       ResolvePackageDependenciesForBuild;\r
72       _HandlePackageFileConflicts;\r
73       $(PrepareResourcesDependsOn)\r
74     </PrepareResourcesDependsOn>\r
75   </PropertyGroup>\r
76 \r
77   <!-- List of targets that emit Dependency DiagnosticMessages items -->\r
78   <PropertyGroup>\r
79     <EmitsDependencyDiagnosticMessages>\r
80       RunResolvePackageDependencies;\r
81       $(EmitsDependencyDiagnosticMessages)\r
82     </EmitsDependencyDiagnosticMessages>\r
83   </PropertyGroup>\r
84 \r
85   <!-- Common tokens used in preprocessed content files -->\r
86   <ItemGroup>\r
87     <PreprocessorValue Include="rootnamespace">\r
88       <Value>$(RootNamespace)</Value>\r
89     </PreprocessorValue>\r
90     <PreprocessorValue Include="assemblyname">\r
91       <Value>$(AssemblyName)</Value>\r
92     </PreprocessorValue>\r
93     <PreprocessorValue Include="fullpath">\r
94       <Value>$(MSBuildProjectDirectory)</Value>\r
95     </PreprocessorValue>\r
96     <PreprocessorValue Include="outputfilename">\r
97       <Value>$(TargetFileName)</Value>\r
98     </PreprocessorValue>\r
99     <PreprocessorValue Include="filename">\r
100       <Value>$(MSBuildProjectFile)</Value>\r
101     </PreprocessorValue>\r
102     <PreprocessorValue Include="@(NuGetPreprocessorValue)" Exclude="@(PreprocessorValue)" />\r
103   </ItemGroup>\r
104 \r
105   <!--\r
106     *************************************\r
107     3. BUILD TARGETS\r
108     - Override the Depends-On properties, or the individual targets\r
109     *************************************\r
110     -->\r
111 \r
112   <!--\r
113     ============================================================\r
114                      ResolvePackageDependenciesForBuild\r
115 \r
116     Populate items for build. This is triggered before target \r
117     "AssignProjectConfiguration" to ensure ProjectReference items\r
118     are populated before ResolveProjectReferences is run.\r
119     ============================================================\r
120     -->\r
121   <PropertyGroup>\r
122     <ResolvePackageDependenciesForBuildDependsOn>\r
123       ResolveLockFileReferences;\r
124       ResolveLockFileAnalyzers;\r
125       ResolveLockFileCopyLocalProjectDeps;\r
126       IncludeTransitiveProjectReferences\r
127     </ResolvePackageDependenciesForBuildDependsOn>\r
128   </PropertyGroup>\r
129   <Target Name="ResolvePackageDependenciesForBuild"\r
130           Condition="'$(ResolvePackageDependenciesForBuild)' == 'true' and Exists('$(ProjectAssetsFile)')"\r
131           BeforeTargets="AssignProjectConfiguration"\r
132           DependsOnTargets="$(ResolvePackageDependenciesForBuildDependsOn)" />\r
133 \r
134   <!--\r
135     *************************************\r
136     4. Package Dependency TASK and TARGETS\r
137     - Raise the lock file to MSBuild Items and create derived items\r
138     *************************************\r
139     -->\r
140 \r
141   <!--\r
142     ============================================================\r
143                      RunResolvePackageDependencies\r
144 \r
145     Generate Definitions and Dependencies based on ResolvePackageDependencies task\r
146     ============================================================\r
147     -->\r
148 \r
149   <UsingTask TaskName="Microsoft.NET.Build.Tasks.ResolvePackageDependencies"\r
150              AssemblyFile="$(MicrosoftNETBuildTasksAssembly)" />\r
151   <UsingTask TaskName="Microsoft.NET.Build.Tasks.CheckForTargetInAssetsFile"\r
152            AssemblyFile="$(MicrosoftNETBuildTasksAssembly)" />\r
153 \r
154   <!-- The condition on this target causes it to be skipped during design-time builds if\r
155         the restore operation hasn't run yet.  This is to avoid displaying an error in\r
156         the Visual Studio error list when a project is created before NuGet restore has\r
157         run and created the assets file. -->\r
158   <Target Name="RunResolvePackageDependencies"\r
159           Condition=" '$(DesignTimeBuild)' != 'true' Or Exists('$(ProjectAssetsFile)')"\r
160           DependsOnTargets="ReportAssetsLogMessages">\r
161     \r
162     <!-- Verify that the assets file has a target for the right framework.  Otherwise, if we restored for the\r
163          wrong framework, we'd end up finding no references to pass to the compiler, and we'd get a ton of\r
164          compile errors. -->\r
165     <CheckForTargetInAssetsFile\r
166       AssetsFilePath="$(ProjectAssetsFile)"\r
167       TargetFrameworkMoniker="$(NuGetTargetMoniker)"\r
168       RuntimeIdentifier="$(RuntimeIdentifier)" />\r
169 \r
170     <ResolvePackageDependencies\r
171       ProjectPath="$(MSBuildProjectFullPath)"\r
172       ProjectAssetsFile="$(ProjectAssetsFile)"\r
173       ProjectLanguage="$(Language)"\r
174       ContinueOnError="ErrorAndContinue">\r
175 \r
176       <Output TaskParameter="TargetDefinitions" ItemName="TargetDefinitions" />\r
177       <Output TaskParameter="PackageDefinitions" ItemName="PackageDefinitions" />\r
178       <Output TaskParameter="FileDefinitions" ItemName="FileDefinitions" />\r
179       <Output TaskParameter="PackageDependencies" ItemName="PackageDependencies" />\r
180       <Output TaskParameter="FileDependencies" ItemName="FileDependencies" />\r
181       <Output TaskParameter="DiagnosticMessages" ItemName="DiagnosticMessages" />\r
182     </ResolvePackageDependencies>\r
183 \r
184   </Target>\r
185 \r
186   <!--\r
187     ============================================================\r
188                      ResolvePackageDependenciesDesignTime\r
189 \r
190     Aggregate the dependencies produced by ResolvePackageDependencies to a form\r
191     that's consumable by an IDE to display package dependencies.\r
192     ============================================================\r
193     -->\r
194 \r
195   <UsingTask TaskName="Microsoft.NET.Build.Tasks.PreprocessPackageDependenciesDesignTime"\r
196              AssemblyFile="$(MicrosoftNETBuildTasksAssembly)" />\r
197   \r
198   <Target Name="ResolvePackageDependenciesDesignTime"\r
199           Returns="@(_DependenciesDesignTime)"\r
200           DependsOnTargets="ResolveAssemblyReferencesDesignTime;$(EmitsDependencyDiagnosticMessages)">\r
201 \r
202     <PreprocessPackageDependenciesDesignTime\r
203           TargetDefinitions="@(TargetDefinitions)"\r
204           PackageDefinitions="@(PackageDefinitions)"\r
205           FileDefinitions="@(FileDefinitions)"\r
206           PackageDependencies="@(PackageDependencies)"\r
207           FileDependencies="@(FileDependencies)"\r
208           References="@(Reference)"\r
209           DefaultImplicitPackages="$(DefaultImplicitPackages)"\r
210           InputDiagnosticMessages="@(DiagnosticMessages)">\r
211 \r
212       <Output TaskParameter="DependenciesDesignTime" ItemName="_DependenciesDesignTime" />\r
213     </PreprocessPackageDependenciesDesignTime>\r
214   </Target>\r
215     \r
216   <!--\r
217     ============================================================\r
218                      CollectSDKReferencesDesignTime\r
219 \r
220     Aggregates the sdk specified as project items and implicit\r
221     packages references.\r
222     ============================================================\r
223     -->\r
224   <UsingTask TaskName="Microsoft.NET.Build.Tasks.CollectSDKReferencesDesignTime"\r
225          AssemblyFile="$(MicrosoftNETBuildTasksAssembly)" />\r
226 \r
227   <Target Name="CollectSDKReferencesDesignTime"\r
228           Returns="@(_SDKReference)"\r
229           DependsOnTargets="CollectPackageReferences">\r
230 \r
231     <CollectSDKReferencesDesignTime\r
232           SdkReferences="@(SdkReference)"\r
233           PackageReferences="@(PackageReference)"\r
234           DefaultImplicitPackages="$(DefaultImplicitPackages)">\r
235 \r
236       <Output TaskParameter="SDKReferencesDesignTime" ItemName="_SDKReference" />\r
237     </CollectSDKReferencesDesignTime>\r
238   </Target>\r
239 \r
240   <!--\r
241     ============================================================\r
242                      CollectResolvedSDKReferencesDesignTime\r
243 \r
244     Aggregates the sdk specified as project items and implicit\r
245     packages produced by ResolvePackageDependencies.\r
246     ============================================================\r
247     -->\r
248   <Target Name="CollectResolvedSDKReferencesDesignTime"\r
249           Returns="@(_ResolvedSDKReference)"\r
250           DependsOnTargets="ResolveSDKReferencesDesignTime;CollectPackageReferences">\r
251 \r
252     <CollectSDKReferencesDesignTime\r
253           SdkReferences="@(ResolvedSdkReference)"\r
254           PackageReferences="@(PackageReference)"\r
255           DefaultImplicitPackages="$(DefaultImplicitPackages)">\r
256 \r
257       <Output TaskParameter="SDKReferencesDesignTime" ItemName="_ResolvedSDKReference" />\r
258     </CollectSDKReferencesDesignTime>\r
259   </Target>\r
260 \r
261   <!--\r
262     ============================================================\r
263                      RunProduceContentAssets\r
264 \r
265     Process content assets by handling preprocessing tokens where necessary, and \r
266     produce copy local items, content items grouped by "build action" and file writes\r
267     ============================================================\r
268     -->\r
269 \r
270   <UsingTask TaskName="Microsoft.NET.Build.Tasks.ProduceContentAssets"\r
271              AssemblyFile="$(MicrosoftNETBuildTasksAssembly)" />\r
272 \r
273   <Target Name="RunProduceContentAssets"\r
274           Returns="_ContentCopyLocalItems;FileWrites"\r
275           DependsOnTargets="_ComputeActiveTFMFileDependencies">\r
276     <ItemGroup>\r
277       <_ContentFileDeps Include="@(_ActiveTFMFileDependencies->WithMetadataValue('FileGroup', 'ContentFile'))" />\r
278       <__ContentFileDefs Include="@(FileDefinitions)" Exclude="@(_ContentFileDeps)" />\r
279       <_ContentFileDefs Include="@(FileDefinitions)" Exclude="@(__ContentFileDefs)" />\r
280     </ItemGroup>\r
281 \r
282     <ProduceContentAssets\r
283       ContentFileDefinitions="@(_ContentFileDefs)"\r
284       ContentFileDependencies="@(_ContentFileDeps)"\r
285       ContentPreprocessorValues="@(PreprocessorValue)"\r
286       ContentPreprocessorOutputDirectory="$(ContentPreprocessorOutputDirectory)"\r
287       ProduceOnlyPreprocessorFiles="$(ProduceOnlyPreprocessorFilesInBuildTask)"\r
288       ProjectLanguage="$(Language)">\r
289 \r
290       <Output TaskParameter="CopyLocalItems" ItemName="_ContentCopyLocalItems" />\r
291       <Output TaskParameter="ProcessedContentItems" ItemName="_ProcessedContentItems" />\r
292       <Output TaskParameter="FileWrites" ItemName="FileWrites" />\r
293     </ProduceContentAssets>\r
294 \r
295     <!-- The items in _ProcessedContentItems need to go into the appropriately-named item group, \r
296          but the names depend upon the items themselves. Split it apart. -->\r
297     <CreateItem Include="@(_ProcessedContentItems)" Condition="'@(_ProcessedContentItems)' != ''">\r
298       <Output TaskParameter="Include" ItemName="%(_ProcessedContentItems.ProcessedItemType)" />\r
299     </CreateItem>\r
300   </Target>\r
301 \r
302   <!--\r
303     ============================================================\r
304                      ReportAssetsLogMessages\r
305 \r
306     Report Log Messages in the assets file to MSBuild and raise them as\r
307     DiagnosticMessage items that can be consumed downstream (e.g. by the\r
308     dependency node in the solution explorer)\r
309     ============================================================\r
310     -->\r
311 \r
312   <UsingTask TaskName="Microsoft.NET.Build.Tasks.ReportAssetsLogMessages"\r
313              AssemblyFile="$(MicrosoftNETBuildTasksAssembly)" />\r
314 \r
315   <!-- The condition on this target causes it to be skipped during design-time builds if\r
316         the restore operation hasn't run yet.  This is to avoid displaying an error in\r
317         the Visual Studio error list when a project is created before NuGet restore has\r
318         run and created the assets file. -->\r
319   <Target Name="ReportAssetsLogMessages"\r
320           Condition="'$(EmitAssetsLogMessages)' == 'true' And ('$(DesignTimeBuild)' != 'true' Or Exists('$(ProjectAssetsFile)'))">\r
321 \r
322     <ReportAssetsLogMessages\r
323       ProjectAssetsFile="$(ProjectAssetsFile)"\r
324       ContinueOnError="ErrorAndContinue">\r
325 \r
326       <Output TaskParameter="DiagnosticMessages" ItemName="DiagnosticMessages" />\r
327     </ReportAssetsLogMessages>\r
328 \r
329   </Target>\r
330 \r
331   <PropertyGroup>\r
332     <EmitsDependencyDiagnosticMessages>\r
333       ReportAssetsLogMessages;\r
334       $(EmitsDependencyDiagnosticMessages)\r
335     </EmitsDependencyDiagnosticMessages>\r
336   </PropertyGroup>\r
337 \r
338   <!--\r
339     ============================================================\r
340     HELPERS: Get Package and File Dependencies matching active TFM and RID\r
341     ============================================================\r
342     -->\r
343 \r
344   <Target Name="_ComputeActiveTFMPackageDependencies"\r
345           DependsOnTargets="RunResolvePackageDependencies"\r
346           Returns="_ActiveTFMPackageDependencies">\r
347     <ItemGroup>\r
348       <_ActiveTFMPackageDependencies Include="@(PackageDependencies->WithMetadataValue('ParentTarget', '$(_NugetTargetMonikerAndRID)'))" />\r
349     </ItemGroup>\r
350   </Target>\r
351 \r
352   <Target Name="_ComputeActiveTFMFileDependencies"\r
353           DependsOnTargets="RunResolvePackageDependencies"\r
354           Returns="_ActiveTFMFileDependencies">\r
355     <ItemGroup>\r
356       <_ActiveTFMFileDependencies Include="@(FileDependencies->WithMetadataValue('ParentTarget', '$(_NugetTargetMonikerAndRID)'))" />\r
357     </ItemGroup>\r
358   </Target>\r
359 \r
360   <Target Name="_ComputeTFMOnlyFileDependencies"\r
361           DependsOnTargets="RunResolvePackageDependencies"\r
362           Returns="_TFMOnlyFileDependencies">\r
363     <ItemGroup>\r
364       <_TFMOnlyFileDependencies Include="@(FileDependencies->WithMetadataValue('ParentTarget', '$(NuGetTargetMoniker)'))" />\r
365     </ItemGroup>\r
366   </Target>\r
367 \r
368   <!--\r
369     ============================================================\r
370     Reference Targets: For populating References based on lock file\r
371     - _ComputeLockFileReferences\r
372     - _ComputeLockFileFrameworks\r
373     - ResolveLockFileReferences\r
374     ============================================================\r
375     -->\r
376 \r
377   <Target Name="_ComputeLockFileReferences"\r
378           DependsOnTargets="_ComputeTFMOnlyFileDependencies"\r
379           Returns="ResolvedCompileFileDefinitions">\r
380     <ItemGroup>\r
381       <_CompileFileItems Include="@(_TFMOnlyFileDependencies->WithMetadataValue('FileGroup', 'CompileTimeAssembly'))" />\r
382 \r
383       <!-- Get corresponding file definitions -->\r
384       <__CompileFileDefinitions Include="@(FileDefinitions)" Exclude="@(_CompileFileItems)" />\r
385       <_CompileFileDefinitions Include="@(FileDefinitions)" Exclude="@(__CompileFileDefinitions)" />\r
386 \r
387       <ResolvedCompileFileDefinitions Include="@(_CompileFileDefinitions->'%(ResolvedPath)')">\r
388         <Private>false</Private>\r
389         <NuGetIsFrameworkReference>false</NuGetIsFrameworkReference>\r
390         <NuGetSourceType>Package</NuGetSourceType>\r
391         <NuGetPackageId>%(PackageName)</NuGetPackageId>\r
392         <NuGetPackageVersion>%(PackageVersion)</NuGetPackageVersion>\r
393       </ResolvedCompileFileDefinitions>\r
394 \r
395     </ItemGroup>\r
396   </Target>\r
397 \r
398   <Target Name="_ComputeLockFileFrameworks"\r
399           Condition="'$(DisableLockFileFrameworks)' != 'true'"\r
400           DependsOnTargets="_ComputeTFMOnlyFileDependencies"\r
401           Returns="ResolvedFrameworkAssemblies">\r
402     <ItemGroup>\r
403       <_FrameworkAssemblies Include="@(_TFMOnlyFileDependencies->WithMetadataValue('FileGroup', 'FrameworkAssembly'))" />\r
404 \r
405       <ResolvedFrameworkAssemblies Include="@(_FrameworkAssemblies->'%(FrameworkAssembly)')">\r
406         <Private>false</Private>\r
407         <NuGetIsFrameworkReference>true</NuGetIsFrameworkReference>\r
408         <NuGetSourceType>Package</NuGetSourceType>\r
409         <NuGetPackageId>%(PackageName)</NuGetPackageId>\r
410         <NuGetPackageVersion>%(PackageVersion)</NuGetPackageVersion>\r
411       </ResolvedFrameworkAssemblies>\r
412 \r
413     </ItemGroup>\r
414   </Target>\r
415 \r
416   <Target Name="ResolveLockFileReferences"\r
417           DependsOnTargets="_ComputeLockFileReferences;_ComputeLockFileFrameworks">\r
418     <ItemGroup>\r
419       <!-- Add the references we computed -->\r
420       <Reference Include="@(ResolvedCompileFileDefinitions)" />\r
421       <Reference Include="@(ResolvedFrameworkAssemblies)" />\r
422 \r
423       <!-- Remove simple name references if we're directly providing a reference assembly to the compiler. For example,\r
424            consider a project with an Reference Include="System", and some NuGet package is providing System.dll.\r
425            Simple references can also come from NuGet framework assemblies, hence this statement should occur after\r
426            including all computed references. -->\r
427       <Reference Remove="%(ResolvedCompileFileDefinitions.FileName)" />\r
428     </ItemGroup>\r
429   </Target>\r
430 \r
431   <!--\r
432     ============================================================\r
433     ProjectReference Targets: Include transitive project references before \r
434                               ResolveProjectReferences is called\r
435     - _ComputeTransitiveProjectReferences\r
436     - IncludeTransitiveProjectReferences\r
437     ============================================================\r
438     -->\r
439 \r
440   <Target Name="_ComputeTransitiveProjectReferences"\r
441           DependsOnTargets="_ComputeActiveTFMPackageDependencies"\r
442           Returns="_TransitiveProjectReferences">\r
443     <ItemGroup>\r
444       <_TransitiveProjectDependencies Include="@(_ActiveTFMPackageDependencies->WithMetadataValue('TransitiveProjectReference', 'true'))" />\r
445 \r
446       <!-- Get corresponding package definitions -->\r
447       <__TransitiveProjectDefinitions Include="@(PackageDefinitions)" Exclude="@(_TransitiveProjectDependencies)" />\r
448       <_TransitiveProjectDefinitions Include="@(PackageDefinitions)" Exclude="@(__TransitiveProjectDefinitions)" />\r
449       \r
450       <_TransitiveProjectReferences Include="%(_TransitiveProjectDefinitions.Path)">\r
451         <ResolvedPath>%(_TransitiveProjectDefinitions.ResolvedPath)</ResolvedPath>\r
452       </_TransitiveProjectReferences>\r
453     </ItemGroup>\r
454   </Target>\r
455 \r
456   <Target Name="IncludeTransitiveProjectReferences"\r
457           DependsOnTargets="_ComputeTransitiveProjectReferences" >\r
458     <ItemGroup>\r
459       <!-- Add the references we computed -->\r
460       <ProjectReference Include="@(_TransitiveProjectReferences)" />\r
461     </ItemGroup>\r
462   </Target>\r
463   \r
464   <!--\r
465     ============================================================\r
466     Analyzer Targets: For populating Analyzers based on lock file\r
467     - _ComputeLockFileAnalyzers\r
468     - ResolveLockFileAnalyzers\r
469     ============================================================\r
470     -->\r
471 \r
472   <Target Name="_ComputeLockFileAnalyzers"\r
473         DependsOnTargets="RunResolvePackageDependencies"\r
474         Returns="ResolvedAnalyzers">\r
475     <ItemGroup>\r
476       <AnalyzerFiles Include="@(FileDefinitions->WithMetadataValue('Analyzer', 'true'))" />\r
477       <ResolvedAnalyzers Include="%(AnalyzerFiles.ResolvedPath)" />\r
478     </ItemGroup>\r
479   </Target>\r
480 \r
481   <Target Name="ResolveLockFileAnalyzers"\r
482           DependsOnTargets="_ComputeLockFileAnalyzers">\r
483     <ItemGroup>\r
484 \r
485       <!-- Add the analyzers we computed -->\r
486       <Analyzer Include="@(ResolvedAnalyzers)" />\r
487 \r
488     </ItemGroup>\r
489   </Target>\r
490 \r
491   <!--\r
492     ============================================================\r
493     CopyLocal Targets: For populating CopyLocal based on lock file\r
494     - _ComputeLockFileCopyLocal\r
495     - ResolveLockFileCopyLocalProjectDeps\r
496     ============================================================\r
497     -->\r
498 \r
499   <Target Name="_ComputeLockFileCopyLocal"\r
500         DependsOnTargets="_ComputeActiveTFMFileDependencies;RunProduceContentAssets"\r
501         Returns="NativeCopyLocalItems;RuntimeCopyLocalItems;ResourceCopyLocalItems;AllCopyLocalItems">\r
502     <ItemGroup>\r
503       <!--NativeLibrary-->\r
504       <_NativeFileItems Include="@(_ActiveTFMFileDependencies->WithMetadataValue('FileGroup', 'NativeLibrary'))" />\r
505       <__NativeCopyLocalItems Include="@(FileDefinitions)" Exclude="@(_NativeFileItems)" />\r
506       <_NativeCopyLocalItems Include="@(FileDefinitions)" Exclude="@(__NativeCopyLocalItems)" />\r
507       <NativeCopyLocalItems Include="%(_NativeCopyLocalItems.ResolvedPath)" />\r
508 \r
509       <!--RuntimeAssembly-->\r
510       <_RuntimeFileItems Include="@(_ActiveTFMFileDependencies->WithMetadataValue('FileGroup', 'RuntimeAssembly'))" />\r
511       <__RuntimeCopyLocalItems Include="@(FileDefinitions)" Exclude="@(_RuntimeFileItems)" />\r
512       <_RuntimeCopyLocalItems Include="@(FileDefinitions)" Exclude="@(__RuntimeCopyLocalItems)" />\r
513       <RuntimeCopyLocalItems Include="%(_RuntimeCopyLocalItems.ResolvedPath)" />\r
514 \r
515       <!--ResourceAssembly-->\r
516       <_ResourceFileItems Include="@(_ActiveTFMFileDependencies->WithMetadataValue('FileGroup', 'ResourceAssembly'))" />\r
517       <__ResourceCopyLocalItems Include="@(FileDefinitions)" Exclude="@(_ResourceFileItems)" />\r
518       <_ResourceCopyLocalItems Include="@(FileDefinitions)" Exclude="@(__ResourceCopyLocalItems)" />\r
519       <ResourceCopyLocalItems Include="%(_ResourceCopyLocalItems.ResolvedPath)" />\r
520 \r
521       <!-- ALL -->\r
522       <_AllCopyLocalItems Include="@(_NativeCopyLocalItems);@(_RuntimeCopyLocalItems);@(_ResourceCopyLocalItems)" />\r
523 \r
524       <AllCopyLocalItems Include="@(_AllCopyLocalItems->'%(ResolvedPath)')">\r
525         <Private>false</Private>\r
526         <NuGetIsFrameworkReference>false</NuGetIsFrameworkReference>\r
527         <NuGetSourceType>Package</NuGetSourceType>\r
528         <NuGetPackageId>%(PackageName)</NuGetPackageId>\r
529         <NuGetPackageVersion>%(PackageVersion)</NuGetPackageVersion>\r
530       </AllCopyLocalItems>\r
531 \r
532       <AllCopyLocalItems Include="@(_ContentCopyLocalItems)">\r
533         <Private>false</Private>\r
534         <NuGetIsFrameworkReference>false</NuGetIsFrameworkReference>\r
535         <NuGetSourceType>Package</NuGetSourceType>\r
536         <NuGetPackageId>%(PackageName)</NuGetPackageId>\r
537         <NuGetPackageVersion>%(PackageVersion)</NuGetPackageVersion>\r
538       </AllCopyLocalItems>\r
539 \r
540     </ItemGroup>\r
541   </Target>\r
542 \r
543   <Target Name="ResolveLockFileCopyLocalProjectDeps"\r
544           Condition="'$(CopyLocalLockFileAssemblies)' == 'true'"\r
545           DependsOnTargets="_ComputeLockFileCopyLocal">\r
546 \r
547     <!-- Add the copy local items -->\r
548     <ItemGroup>\r
549       <ReferenceCopyLocalPaths Include="@(AllCopyLocalItems)" Exclude="@(ResourceCopyLocalItems)" />\r
550       <ReferenceCopyLocalPaths Include="@(ResourceCopyLocalItems)" Condition="'@(ResourceCopyLocalItems)' != ''">\r
551         <DestinationSubDirectory>$([System.IO.Directory]::GetParent(%(ResourceCopyLocalItems.FullPath)).get_Name())\</DestinationSubDirectory>\r
552       </ReferenceCopyLocalPaths>\r
553     </ItemGroup>\r
554 \r
555   </Target>\r
556 \r
557 </Project>