2 ***********************************************************************************************
\r
3 Microsoft.PackageDependencyResolution.targets
\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
15 *************************************
\r
17 - That configure the PackageDependency targets
\r
18 *************************************
\r
21 <!-- General Properties -->
\r
23 <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
\r
26 <!-- Project Assets File -->
\r
28 <ProjectAssetsFile Condition="'$(ProjectAssetsFile)' == ''">$(BaseIntermediateOutputPath)/project.assets.json</ProjectAssetsFile>
\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
37 <ResolvePackageDependenciesForBuild Condition="'$(ResolvePackageDependenciesForBuild)' == ''">true</ResolvePackageDependenciesForBuild>
\r
38 <CopyLocalLockFileAssemblies Condition="'$(CopyLocalLockFileAssemblies)' == ''">true</CopyLocalLockFileAssemblies>
\r
40 <ContentPreprocessorOutputDirectory Condition="'$(ContentPreprocessorOutputDirectory)' == ''">$(IntermediateOutputPath)NuGet\</ContentPreprocessorOutputDirectory>
\r
41 <ProduceOnlyPreprocessorFilesInBuildTask Condition="'$(ProduceOnlyPreprocessorFilesInBuildTask)' == ''">true</ProduceOnlyPreprocessorFilesInBuildTask>
\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
48 <!-- Target Moniker + RID-->
\r
49 <PropertyGroup Condition="'$(_NugetTargetMonikerAndRID)' == ''">
\r
50 <_NugetTargetMonikerAndRID Condition="'$(RuntimeIdentifier)' == ''">$(NuGetTargetMoniker)</_NugetTargetMonikerAndRID>
\r
51 <_NugetTargetMonikerAndRID Condition="'$(RuntimeIdentifier)' != ''">$(NuGetTargetMoniker)/$(RuntimeIdentifier)</_NugetTargetMonikerAndRID>
\r
55 *************************************
\r
56 2. EXTERNAL PROPERTIES and ITEMS
\r
57 - Override or add to external targets
\r
58 *************************************
\r
62 <ResolveAssemblyReferencesDependsOn>
\r
63 $(ResolveAssemblyReferencesDependsOn);
\r
64 ResolvePackageDependenciesForBuild;
\r
65 </ResolveAssemblyReferencesDependsOn>
\r
67 <PrepareResourcesDependsOn>
\r
68 ResolvePackageDependenciesForBuild;
\r
69 $(PrepareResourcesDependsOn)
\r
70 </PrepareResourcesDependsOn>
\r
73 <!-- List of targets that emit Dependency DiagnosticMessages items -->
\r
75 <EmitsDependencyDiagnosticMessages>
\r
76 RunResolvePackageDependencies;
\r
77 $(EmitsDependencyDiagnosticMessages)
\r
78 </EmitsDependencyDiagnosticMessages>
\r
81 <!-- Common tokens used in preprocessed content files -->
\r
83 <PreprocessorValue Include="rootnamespace">
\r
84 <Value>$(RootNamespace)</Value>
\r
85 </PreprocessorValue>
\r
86 <PreprocessorValue Include="assemblyname">
\r
87 <Value>$(AssemblyName)</Value>
\r
88 </PreprocessorValue>
\r
89 <PreprocessorValue Include="fullpath">
\r
90 <Value>$(MSBuildProjectDirectory)</Value>
\r
91 </PreprocessorValue>
\r
92 <PreprocessorValue Include="outputfilename">
\r
93 <Value>$(TargetFileName)</Value>
\r
94 </PreprocessorValue>
\r
95 <PreprocessorValue Include="filename">
\r
96 <Value>$(MSBuildProjectFile)</Value>
\r
97 </PreprocessorValue>
\r
98 <PreprocessorValue Include="@(NuGetPreprocessorValue)" Exclude="@(PreprocessorValue)" />
\r
102 *************************************
\r
104 - Override the Depends-On properties, or the individual targets
\r
105 *************************************
\r
109 ============================================================
\r
110 ResolvePackageDependenciesForBuild
\r
112 Populate items for build. This is triggered before target
\r
113 "AssignProjectConfiguration" to ensure ProjectReference items
\r
114 are populated before ResolveProjectReferences is run.
\r
115 ============================================================
\r
118 <ResolvePackageDependenciesForBuildDependsOn>
\r
119 ResolveLockFileReferences;
\r
120 ResolveLockFileAnalyzers;
\r
121 ResolveLockFileCopyLocalProjectDeps;
\r
122 IncludeTransitiveProjectReferences;
\r
123 </ResolvePackageDependenciesForBuildDependsOn>
\r
125 <Target Name="ResolvePackageDependenciesForBuild"
\r
126 Condition="'$(ResolvePackageDependenciesForBuild)' == 'true' and Exists('$(ProjectAssetsFile)')"
\r
127 BeforeTargets="AssignProjectConfiguration"
\r
128 DependsOnTargets="$(ResolvePackageDependenciesForBuildDependsOn)" />
\r
131 *************************************
\r
132 4. Package Dependency TASK and TARGETS
\r
133 - Raise the lock file to MSBuild Items and create derived items
\r
134 *************************************
\r
138 ============================================================
\r
139 RunResolvePackageDependencies
\r
141 Generate Definitions and Dependencies based on ResolvePackageDependencies task
\r
142 ============================================================
\r
145 <UsingTask TaskName="Microsoft.NET.Build.Tasks.ResolvePackageDependencies"
\r
146 AssemblyFile="$(MicrosoftNETBuildTasksAssembly)" />
\r
148 <!-- The condition on this target causes it to be skipped during design-time builds if
\r
149 the restore operation hasn't run yet. This is to avoid displaying an error in
\r
150 the Visual Studio error list when a project is created before NuGet restore has
\r
151 run and created the assets file. -->
\r
152 <Target Name="RunResolvePackageDependencies"
\r
153 Condition=" '$(DesignTimeBuild)' != 'true' Or Exists('$(ProjectAssetsFile)')">
\r
154 <ResolvePackageDependencies
\r
155 ProjectPath="$(MSBuildProjectFullPath)"
\r
156 ProjectAssetsFile="$(ProjectAssetsFile)"
\r
157 ProjectLanguage="$(Language)"
\r
158 ContinueOnError="ErrorAndContinue">
\r
160 <Output TaskParameter="TargetDefinitions" ItemName="TargetDefinitions" />
\r
161 <Output TaskParameter="PackageDefinitions" ItemName="PackageDefinitions" />
\r
162 <Output TaskParameter="FileDefinitions" ItemName="FileDefinitions" />
\r
163 <Output TaskParameter="PackageDependencies" ItemName="PackageDependencies" />
\r
164 <Output TaskParameter="FileDependencies" ItemName="FileDependencies" />
\r
165 <Output TaskParameter="DiagnosticMessages" ItemName="DiagnosticMessages" />
\r
166 </ResolvePackageDependencies>
\r
171 ============================================================
\r
172 ResolvePackageDependenciesDesignTime
\r
174 Aggregate the dependencies produced by ResolvePackageDependencies to a form
\r
175 that's consumable by an IDE to display package dependencies.
\r
176 ============================================================
\r
179 <UsingTask TaskName="Microsoft.NET.Build.Tasks.PreprocessPackageDependenciesDesignTime"
\r
180 AssemblyFile="$(MicrosoftNETBuildTasksAssembly)" />
\r
182 <Target Name="ResolvePackageDependenciesDesignTime"
\r
183 Returns="@(_DependenciesDesignTime)"
\r
184 DependsOnTargets="ResolveAssemblyReferencesDesignTime;$(EmitsDependencyDiagnosticMessages)">
\r
186 <PreprocessPackageDependenciesDesignTime
\r
187 TargetDefinitions="@(TargetDefinitions)"
\r
188 PackageDefinitions="@(PackageDefinitions)"
\r
189 FileDefinitions="@(FileDefinitions)"
\r
190 PackageDependencies="@(PackageDependencies)"
\r
191 FileDependencies="@(FileDependencies)"
\r
192 DefaultImplicitPackages="$(DefaultImplicitPackages)"
\r
193 InputDiagnosticMessages="@(DiagnosticMessages)">
\r
195 <Output TaskParameter="DependenciesDesignTime" ItemName="_DependenciesDesignTime" />
\r
196 </PreprocessPackageDependenciesDesignTime>
\r
200 ============================================================
\r
201 CollectSDKReferencesDesignTime
\r
203 Aggregates the sdk specified as project items and implicit
\r
204 packages references.
\r
205 ============================================================
\r
207 <UsingTask TaskName="Microsoft.NET.Build.Tasks.CollectResolvedSDKReferencesDesignTime"
\r
208 AssemblyFile="$(MicrosoftNETBuildTasksAssembly)" />
\r
210 <Target Name="CollectSDKReferencesDesignTime"
\r
211 Returns="@(_SDKReference)"
\r
212 DependsOnTargets="ResolvePackageDependenciesDesignTime">
\r
214 <CollectResolvedSDKReferencesDesignTime
\r
215 ResolvedSdkReferences="@(SdkReference)"
\r
216 DependenciesDesignTime="@(_DependenciesDesignTime)">
\r
218 <Output TaskParameter="ResolvedSDKReferencesDesignTime" ItemName="_SDKReference" />
\r
220 </CollectResolvedSDKReferencesDesignTime>
\r
224 ============================================================
\r
225 CollectResolvedSDKReferencesDesignTime
\r
227 Aggregates the sdk specified as project items and implicit
\r
228 packages produced by ResolvePackageDependencies.
\r
229 ============================================================
\r
232 <Target Name="CollectResolvedSDKReferencesDesignTime"
\r
233 Returns="@(_ResolvedSDKReference)"
\r
234 DependsOnTargets="ResolveSDKReferencesDesignTime;ResolvePackageDependenciesDesignTime">
\r
236 <CollectResolvedSDKReferencesDesignTime
\r
237 ResolvedSdkReferences="@(ResolvedSdkReference)"
\r
238 DependenciesDesignTime="@(_DependenciesDesignTime)">
\r
240 <Output TaskParameter="ResolvedSDKReferencesDesignTime" ItemName="_ResolvedSDKReference" />
\r
241 </CollectResolvedSDKReferencesDesignTime>
\r
245 ============================================================
\r
246 RunProduceContentAssets
\r
248 Process content assets by handling preprocessing tokens where necessary, and
\r
249 produce copy local items, content items grouped by "build action" and file writes
\r
250 ============================================================
\r
253 <UsingTask TaskName="Microsoft.NET.Build.Tasks.ProduceContentAssets"
\r
254 AssemblyFile="$(MicrosoftNETBuildTasksAssembly)" />
\r
256 <Target Name="RunProduceContentAssets"
\r
257 Returns="_ContentCopyLocalItems;FileWrites"
\r
258 DependsOnTargets="_ComputeActiveTFMFileDependencies">
\r
260 <_ContentFileDeps Include="@(_ActiveTFMFileDependencies->WithMetadataValue('FileGroup', 'ContentFile'))" />
\r
261 <__ContentFileDefs Include="@(FileDefinitions)" Exclude="@(_ContentFileDeps)" />
\r
262 <_ContentFileDefs Include="@(FileDefinitions)" Exclude="@(__ContentFileDefs)" />
\r
265 <ProduceContentAssets
\r
266 ContentFileDefinitions="@(_ContentFileDefs)"
\r
267 ContentFileDependencies="@(_ContentFileDeps)"
\r
268 ContentPreprocessorValues="@(PreprocessorValue)"
\r
269 ContentPreprocessorOutputDirectory="$(ContentPreprocessorOutputDirectory)"
\r
270 ProduceOnlyPreprocessorFiles="$(ProduceOnlyPreprocessorFilesInBuildTask)"
\r
271 ProjectLanguage="$(Language)">
\r
273 <Output TaskParameter="CopyLocalItems" ItemName="_ContentCopyLocalItems" />
\r
274 <Output TaskParameter="ProcessedContentItems" ItemName="_ProcessedContentItems" />
\r
275 <Output TaskParameter="FileWrites" ItemName="FileWrites" />
\r
276 </ProduceContentAssets>
\r
278 <!-- The items in _ProcessedContentItems need to go into the appropriately-named item group,
\r
279 but the names depend upon the items themselves. Split it apart. -->
\r
280 <CreateItem Include="@(_ProcessedContentItems)" Condition="'@(_ProcessedContentItems)' != ''">
\r
281 <Output TaskParameter="Include" ItemName="%(_ProcessedContentItems.ProcessedItemType)" />
\r
286 ============================================================
\r
287 HELPERS: Get Package and File Dependencies matching active TFM and RID
\r
288 ============================================================
\r
291 <Target Name="_ComputeActiveTFMPackageDependencies"
\r
292 DependsOnTargets="RunResolvePackageDependencies"
\r
293 Returns="_ActiveTFMPackageDependencies">
\r
295 <_ActiveTFMPackageDependencies Include="@(PackageDependencies->WithMetadataValue('ParentTarget', '$(_NugetTargetMonikerAndRID)'))" />
\r
299 <Target Name="_ComputeActiveTFMFileDependencies"
\r
300 DependsOnTargets="RunResolvePackageDependencies"
\r
301 Returns="_ActiveTFMFileDependencies">
\r
303 <_ActiveTFMFileDependencies Include="@(FileDependencies->WithMetadataValue('ParentTarget', '$(_NugetTargetMonikerAndRID)'))" />
\r
307 <Target Name="_ComputeTFMOnlyFileDependencies"
\r
308 DependsOnTargets="RunResolvePackageDependencies"
\r
309 Returns="_TFMOnlyFileDependencies">
\r
311 <_TFMOnlyFileDependencies Include="@(FileDependencies->WithMetadataValue('ParentTarget', '$(NuGetTargetMoniker)'))" />
\r
316 ============================================================
\r
317 Reference Targets: For populating References based on lock file
\r
318 - _ComputeLockFileReferences
\r
319 - _ComputeLockFileFrameworks
\r
320 - ResolveLockFileReferences
\r
321 ============================================================
\r
324 <Target Name="_ComputeLockFileReferences"
\r
325 DependsOnTargets="_ComputeTFMOnlyFileDependencies"
\r
326 Returns="ResolvedCompileFileDefinitions">
\r
328 <_CompileFileItems Include="@(_TFMOnlyFileDependencies->WithMetadataValue('FileGroup', 'CompileTimeAssembly'))" />
\r
330 <!-- Get corresponding file definitions -->
\r
331 <__CompileFileDefinitions Include="@(FileDefinitions)" Exclude="@(_CompileFileItems)" />
\r
332 <_CompileFileDefinitions Include="@(FileDefinitions)" Exclude="@(__CompileFileDefinitions)" />
\r
334 <ResolvedCompileFileDefinitions Include="@(_CompileFileDefinitions->'%(ResolvedPath)')">
\r
335 <Private>false</Private>
\r
336 <NuGetIsFrameworkReference>false</NuGetIsFrameworkReference>
\r
337 <NuGetSourceType>Package</NuGetSourceType>
\r
338 <NuGetPackageId>%(PackageName)</NuGetPackageId>
\r
339 <NuGetPackageVersion>%(PackageVersion)</NuGetPackageVersion>
\r
340 </ResolvedCompileFileDefinitions>
\r
345 <Target Name="_ComputeLockFileFrameworks"
\r
346 Condition="'$(DisableLockFileFrameworks)' != 'true'"
\r
347 DependsOnTargets="_ComputeTFMOnlyFileDependencies"
\r
348 Returns="ResolvedFrameworkAssemblies">
\r
350 <_FrameworkAssemblies Include="@(_TFMOnlyFileDependencies->WithMetadataValue('FileGroup', 'FrameworkAssembly'))" />
\r
352 <ResolvedFrameworkAssemblies Include="@(_FrameworkAssemblies->'%(FrameworkAssembly)')">
\r
353 <Private>false</Private>
\r
354 <NuGetIsFrameworkReference>true</NuGetIsFrameworkReference>
\r
355 <NuGetSourceType>Package</NuGetSourceType>
\r
356 <NuGetPackageId>%(PackageName)</NuGetPackageId>
\r
357 <NuGetPackageVersion>%(PackageVersion)</NuGetPackageVersion>
\r
358 </ResolvedFrameworkAssemblies>
\r
363 <Target Name="ResolveLockFileReferences"
\r
364 DependsOnTargets="_ComputeLockFileReferences;_ComputeLockFileFrameworks">
\r
366 <!-- Add the references we computed -->
\r
367 <Reference Include="@(ResolvedCompileFileDefinitions)" />
\r
368 <Reference Include="@(ResolvedFrameworkAssemblies)" />
\r
370 <!-- Remove simple name references if we're directly providing a reference assembly to the compiler. For example,
\r
371 consider a project with an Reference Include="System", and some NuGet package is providing System.dll.
\r
372 Simple references can also come from NuGet framework assemblies, hence this statement should occur after
\r
373 including all computed references. -->
\r
374 <Reference Remove="%(ResolvedCompileFileDefinitions.FileName)" />
\r
379 ============================================================
\r
380 ProjectReference Targets: Include transitive project references before
\r
381 ResolveProjectReferences is called
\r
382 - _ComputeTransitiveProjectReferences
\r
383 - IncludeTransitiveProjectReferences
\r
384 ============================================================
\r
387 <Target Name="_ComputeTransitiveProjectReferences"
\r
388 DependsOnTargets="_ComputeActiveTFMPackageDependencies"
\r
389 Returns="_TransitiveProjectReferences">
\r
391 <_TransitiveProjectDependencies Include="@(_ActiveTFMPackageDependencies->WithMetadataValue('TransitiveProjectReference', 'true'))" />
\r
393 <!-- Get corresponding package definitions -->
\r
394 <__TransitiveProjectDefinitions Include="@(PackageDefinitions)" Exclude="@(_TransitiveProjectDependencies)" />
\r
395 <_TransitiveProjectDefinitions Include="@(PackageDefinitions)" Exclude="@(__TransitiveProjectDefinitions)" />
\r
397 <_TransitiveProjectReferences Include="%(_TransitiveProjectDefinitions.Path)">
\r
398 <ResolvedPath>%(_TransitiveProjectDefinitions.ResolvedPath)</ResolvedPath>
\r
399 </_TransitiveProjectReferences>
\r
403 <Target Name="IncludeTransitiveProjectReferences"
\r
404 DependsOnTargets="_ComputeTransitiveProjectReferences" >
\r
406 <!-- Add the references we computed -->
\r
407 <ProjectReference Include="@(_TransitiveProjectReferences)" />
\r
412 ============================================================
\r
413 Analyzer Targets: For populating Analyzers based on lock file
\r
414 - _ComputeLockFileAnalyzers
\r
415 - ResolveLockFileAnalyzers
\r
416 ============================================================
\r
419 <Target Name="_ComputeLockFileAnalyzers"
\r
420 DependsOnTargets="RunResolvePackageDependencies"
\r
421 Returns="ResolvedAnalyzers">
\r
423 <AnalyzerFiles Include="@(FileDefinitions->WithMetadataValue('Analyzer', 'true'))" />
\r
424 <ResolvedAnalyzers Include="%(AnalyzerFiles.ResolvedPath)" />
\r
428 <Target Name="ResolveLockFileAnalyzers"
\r
429 DependsOnTargets="_ComputeLockFileAnalyzers">
\r
432 <!-- Add the analyzers we computed -->
\r
433 <Analyzer Include="@(ResolvedAnalyzers)" />
\r
439 ============================================================
\r
440 CopyLocal Targets: For populating CopyLocal based on lock file
\r
441 - _ComputeLockFileCopyLocal
\r
442 - ResolveLockFileCopyLocalProjectDeps
\r
443 ============================================================
\r
446 <Target Name="_ComputeLockFileCopyLocal"
\r
447 DependsOnTargets="_ComputeActiveTFMFileDependencies;RunProduceContentAssets"
\r
448 Returns="NativeCopyLocalItems;RuntimeCopyLocalItems;ResourceCopyLocalItems;AllCopyLocalItems">
\r
450 <!--NativeLibrary-->
\r
451 <_NativeFileItems Include="@(_ActiveTFMFileDependencies->WithMetadataValue('FileGroup', 'NativeLibrary'))" />
\r
452 <__NativeCopyLocalItems Include="@(FileDefinitions)" Exclude="@(_NativeFileItems)" />
\r
453 <_NativeCopyLocalItems Include="@(FileDefinitions)" Exclude="@(__NativeCopyLocalItems)" />
\r
454 <NativeCopyLocalItems Include="%(_NativeCopyLocalItems.ResolvedPath)" />
\r
456 <!--RuntimeAssembly-->
\r
457 <_RuntimeFileItems Include="@(_ActiveTFMFileDependencies->WithMetadataValue('FileGroup', 'RuntimeAssembly'))" />
\r
458 <__RuntimeCopyLocalItems Include="@(FileDefinitions)" Exclude="@(_RuntimeFileItems)" />
\r
459 <_RuntimeCopyLocalItems Include="@(FileDefinitions)" Exclude="@(__RuntimeCopyLocalItems)" />
\r
460 <RuntimeCopyLocalItems Include="%(_RuntimeCopyLocalItems.ResolvedPath)" />
\r
462 <!--ResourceAssembly-->
\r
463 <_ResourceFileItems Include="@(_ActiveTFMFileDependencies->WithMetadataValue('FileGroup', 'ResourceAssembly'))" />
\r
464 <__ResourceCopyLocalItems Include="@(FileDefinitions)" Exclude="@(_ResourceFileItems)" />
\r
465 <_ResourceCopyLocalItems Include="@(FileDefinitions)" Exclude="@(__ResourceCopyLocalItems)" />
\r
466 <ResourceCopyLocalItems Include="%(_ResourceCopyLocalItems.ResolvedPath)" />
\r
469 <_AllCopyLocalItems Include="@(_NativeCopyLocalItems);@(_RuntimeCopyLocalItems);@(_ResourceCopyLocalItems)" />
\r
471 <AllCopyLocalItems Include="@(_AllCopyLocalItems->'%(ResolvedPath)')">
\r
472 <Private>false</Private>
\r
473 <NuGetIsFrameworkReference>false</NuGetIsFrameworkReference>
\r
474 <NuGetSourceType>Package</NuGetSourceType>
\r
475 <NuGetPackageId>%(PackageName)</NuGetPackageId>
\r
476 <NuGetPackageVersion>%(PackageVersion)</NuGetPackageVersion>
\r
477 </AllCopyLocalItems>
\r
479 <AllCopyLocalItems Include="@(_ContentCopyLocalItems)">
\r
480 <Private>false</Private>
\r
481 <NuGetIsFrameworkReference>false</NuGetIsFrameworkReference>
\r
482 <NuGetSourceType>Package</NuGetSourceType>
\r
483 <NuGetPackageId>%(PackageName)</NuGetPackageId>
\r
484 <NuGetPackageVersion>%(PackageVersion)</NuGetPackageVersion>
\r
485 </AllCopyLocalItems>
\r
490 <Target Name="ResolveLockFileCopyLocalProjectDeps"
\r
491 Condition="'$(CopyLocalLockFileAssemblies)' == 'true'"
\r
492 DependsOnTargets="_ComputeLockFileCopyLocal">
\r
494 <!-- Add the copy local items -->
\r
496 <ReferenceCopyLocalPaths Include="@(AllCopyLocalItems)" />
\r