@@ -290,7 +290,7 @@ let createAlternativeNuGetConfig (projectFile:FileInfo, objDirectory:DirectoryIn
290290
291291let FSharpCore = PackageName " FSharp.Core"
292292
293- let createPaketPropsFile ( lockFile : LockFile ) ( cliTools : ResolvedPackage seq ) ( packages :(( GroupName * PackageName ) * PackageInstallSettings * _ )seq ) ( fileInfo : FileInfo ) =
293+ let createPaketPropsFile ( lockFile : LockFile ) ( cliTools : ResolvedPackage seq ) ( referencesFile : ReferencesFile ) ( packages :(( GroupName * PackageName ) * PackageInstallSettings * _ )seq ) ( fileInfo : FileInfo ) =
294294 let cliParts =
295295 if Seq.isEmpty cliTools then
296296 " "
@@ -300,6 +300,13 @@ let createPaketPropsFile (lockFile:LockFile) (cliTools:ResolvedPackage seq) (pac
300300 |> fun xs -> String.Join( Environment.NewLine, xs)
301301 |> fun s -> " <ItemGroup>" + Environment.NewLine + s + Environment.NewLine + " </ItemGroup>"
302302
303+
304+ let allDirectPackages =
305+ referencesFile.Groups.Values
306+ |> Seq.collect ( fun g -> g.NugetPackages)
307+ |> Seq.map ( fun p -> p.Name)
308+ |> Set.ofSeq
309+
303310 let packagesParts =
304311 if Seq.isEmpty packages then
305312 " "
@@ -328,8 +335,13 @@ let createPaketPropsFile (lockFile:LockFile) (cliTools:ResolvedPackage seq) (pac
328335 let packageReferences =
329336 packages
330337 |> Seq.collect ( fun ( p , _ , packageSettings ) ->
331- [ yield sprintf """ <PackageReference Include="%O ">""" p.Name
332- yield sprintf """ <Version>%O </Version>""" p.Version
338+ let directReferenceCondition =
339+ if not ( allDirectPackages.Contains p.Name) then
340+ " Condition=\" '$(ManagePackageVersionsCentrally)' != 'true' \" "
341+ else " "
342+
343+ [ yield sprintf """ <PackageReference %s Include="%O ">""" directReferenceCondition p.Name
344+ yield sprintf """ <Version Condition=" '$(ManagePackageVersionsCentrally)' != 'true' ">%O </Version>""" p.Version
333345 let excludeAssets =
334346 [ if combineCopyLocal p.Settings packageSettings = Some false then yield " runtime"
335347 if combineOmitContent p.Settings packageSettings = Some ContentCopySettings.Omit then yield " contentFiles"
@@ -338,10 +350,23 @@ let createPaketPropsFile (lockFile:LockFile) (cliTools:ResolvedPackage seq) (pac
338350 match excludeAssets with
339351 | [] -> ()
340352 | tags -> yield sprintf """ <ExcludeAssets>%s </ExcludeAssets>""" ( tags |> String.concat " ;" )
353+
354+ match combineCopyLocal p.Settings packageSettings with
355+ | Some true -> yield sprintf """ <PrivateAssets>All</PrivateAssets>"""
356+ | _ -> ()
357+
341358 yield """ </PackageReference>""" ])
342359
360+ let packageVersions =
361+ packages
362+ |> Seq.collect ( fun ( p , _ , __ ) ->
363+ [ yield sprintf """ <PackageVersion Include="%O ">""" p.Name
364+ yield sprintf """ <Version>%O </Version>""" p.Version
365+ yield """ </PackageVersion>""" ])
366+
343367 [ yield sprintf " <ItemGroup Condition=\" ($(DesignTimeBuild) == true)%s \" >" condition
344368 yield ! packageReferences
369+ yield ! packageVersions
345370 yield " </ItemGroup>" ])
346371 |> fun xs -> String.Join( Environment.NewLine, xs)
347372
@@ -524,7 +549,7 @@ let createProjectReferencesFiles (lockFile:LockFile) (projectFile:ProjectFile) (
524549 createPaketCLIToolsFile cliTools paketCLIToolsFileName
525550
526551 let propsFile = FileInfo( Path.Combine( objDirFullName, projectFileInfo.Name + " .paket.props" ))
527- let written , _ = createPaketPropsFile lockFile cliTools packages propsFile
552+ let written , _ = createPaketPropsFile lockFile cliTools referencesFile packages propsFile
528553 if written then
529554 try
530555 let fi = FileInfo( Path.Combine( objDirFullName, " project.assets.json" ))
0 commit comments