@@ -216,13 +216,57 @@ module ScriptGeneration =
216216 None
217217 else
218218 Some ( groupName.ToString())
219+
220+ let generateGroupScript
221+ ( deps : Dependencies )
222+ ( getScriptFile : GroupName -> FileInfo )
223+ ( writeScript : FileInfo -> ScriptPiece seq -> unit )
224+ ( framework : FrameworkIdentifier )
225+ =
226+ let all =
227+ seq {
228+ for group, nuget, _ in deps.GetInstalledPackages() do
229+ let model = deps.GetInstalledPackageModel( Some group, nuget)
230+ let libs = model.GetLibReferences( framework) |> Seq.map FileInfo
231+ let syslibs = model.GetFrameworkAssembliesLazy.Value
232+ yield group, ( libs, syslibs |> Set.toSeq)
233+ }
234+ |> Seq.groupBy fst
235+ |> Seq.map ( fun ( group , items ) -> group, items |> Seq.map snd)
236+
237+ for group, libs in all do
238+ let assemblies , frameworkLibs =
239+ Seq.foldBack ( fun ( l , r ) ( pl , pr ) -> Seq.concat [ pl ; l], Seq.concat [ pr ; r]) libs ( Seq.empty, Seq.empty)
240+ |> fun ( l , r ) -> Seq.distinct l, Seq.distinct r
241+
242+ let assemblies =
243+ let assemblyFilePerAssemblyDef =
244+ assemblies
245+ |> Seq.map ( fun f -> f.FullName |> AssemblyDefinition.ReadAssembly, f)
246+ |> dict
247+
248+ assemblyFilePerAssemblyDef.Keys
249+ |> Seq.toList
250+ |> PackageAndAssemblyResolution.getDllOrder
251+ |> Seq.map ( assemblyFilePerAssemblyDef.TryGetValue >> snd)
252+
253+ let scriptFile = getScriptFile ( GroupName group)
254+
255+ [
256+ for a in frameworkLibs do
257+ yield ScriptPiece.ReferenceFrameworkAssembly a
258+ for a in assemblies do
259+ yield ScriptPiece.ReferenceAssemblyFile a
260+ yield ScriptPiece.PrintStatement ( sprintf " Loaded group %s " group)
261+ ]
262+ |> writeScript scriptFile
219263
220264 /// Generate a include script from given order of packages,
221265 /// if a package is ordered before its dependencies this function
222266 /// will throw.
223267 let generateScripts
224268 ( scriptGenerator : ScriptGenInput -> ScriptGenResult )
225- ( writeScript : FileInfo -> ScriptPiece list -> unit )
269+ ( writeScript : FileInfo -> ScriptPiece seq -> unit )
226270 ( getScriptFile : GroupName -> PackageName -> FileInfo )
227271 ( includeScriptsRootFolder : DirectoryInfo )
228272 ( framework : FrameworkIdentifier )
@@ -279,7 +323,8 @@ module ScriptGeneration =
279323 let packagesFolder = DirectoryInfo( Path.Combine( rootFolder.FullName, Constants.PackagesFolderName))
280324
281325 let includeScriptsRootFolder =
282- DirectoryInfo( Path.Combine(( FileInfo dependenciesFile.DependenciesFile) .Directory.FullName, Constants.PaketFilesFolderName, " include-scripts" ))
326+ Path.Combine(( FileInfo dependenciesFile.DependenciesFile) .Directory.FullName, Constants.PaketFilesFolderName, " include-scripts" )
327+ |> DirectoryInfo
283328
284329 let getScriptFile groupName packageName =
285330 getScriptFile includeScriptsRootFolder framework groupName packageName extension
@@ -296,6 +341,13 @@ module ScriptGeneration =
296341 )
297342 |> ignore
298343
344+ let getGroupFile group =
345+ let folder = getScriptFolder includeScriptsRootFolder framework group
346+ Path.Combine( folder.FullName, sprintf " include.%s .group.%s " ( group.GetCompareString()) extension) .ToLowerInvariant()
347+ |> FileInfo
348+
349+ generateGroupScript dependenciesFile getGroupFile scriptWriter framework
350+
299351 type ScriptType =
300352 | CSharp
301353 | FSharp
0 commit comments