@@ -15,14 +15,6 @@ internal class Assets
1515 {
1616 private readonly ProgressMonitor progressMonitor ;
1717
18- private static readonly string [ ] netFrameworks = new [ ] {
19- "microsoft.aspnetcore.app.ref" ,
20- "microsoft.netcore.app.ref" ,
21- "microsoft.netframework.referenceassemblies" ,
22- "microsoft.windowsdesktop.app.ref" ,
23- "netstandard.library.ref"
24- } ;
25-
2618 internal Assets ( ProgressMonitor progressMonitor )
2719 {
2820 this . progressMonitor = progressMonitor ;
@@ -69,19 +61,19 @@ private record class ReferenceInfo(string? Type, Dictionary<string, object>? Com
6961 /// }
7062 /// }
7163 ///
72- /// Returns dependencies
73- /// RequiredPaths = {
64+ /// Adds the following dependencies
65+ /// Paths: {
7466 /// "castle.core/4.4.1/lib/netstandard1.5/Castle.Core.dll",
7567 /// "json.net/1.0.33/lib/netstandard2.0/Json.Net.dll"
7668 /// }
77- /// UsedPackages = {
69+ /// Packages: {
7870 /// "castle.core",
7971 /// "json.net"
8072 /// }
8173 /// </summary>
82- private DependencyContainer AddPackageDependencies ( JObject json , DependencyContainer dependencies )
74+ private void AddPackageDependencies ( JObject json , DependencyContainer dependencies )
8375 {
84- // If there are more than one framework we need to pick just one.
76+ // If there is more than one framework we need to pick just one.
8577 // To ensure stability we pick one based on the lexicographic order of
8678 // the framework names.
8779 var references = json
@@ -94,7 +86,7 @@ private DependencyContainer AddPackageDependencies(JObject json, DependencyConta
9486 if ( references is null )
9587 {
9688 progressMonitor . LogDebug ( "No references found in the targets section in the assets file." ) ;
97- return dependencies ;
89+ return ;
9890 }
9991
10092 // Find all the compile dependencies for each reference and
@@ -109,19 +101,83 @@ private DependencyContainer AddPackageDependencies(JObject json, DependencyConta
109101 return ;
110102 }
111103
112- // If this is a .NET framework reference then include everything.
113- if ( netFrameworks . Any ( framework => name . StartsWith ( framework ) ) )
114- {
115- dependencies . Add ( name ) ;
116- }
117- else
104+ if ( info . Compile is null || ! info . Compile . Any ( ) )
118105 {
119- info . Compile ?
120- . ForEach ( r => dependencies . Add ( name , r . Key ) ) ;
106+ // If this is a framework reference then include everything.
107+ if ( FrameworkPackageNames . AllFrameworks . Any ( framework => name . StartsWith ( framework ) ) )
108+ {
109+ dependencies . AddFramework ( name ) ;
110+ }
111+ return ;
121112 }
113+
114+ info . Compile
115+ . ForEach ( r => dependencies . Add ( name , r . Key ) ) ;
122116 } ) ;
123117
124- return dependencies ;
118+ return ;
119+ }
120+
121+ /// <summary>
122+ /// Add the framework dependencies from the assets file to dependencies.
123+ ///
124+ /// Example:
125+ /// "project": {
126+ // "version": "1.0.0",
127+ // "frameworks": {
128+ // "net7.0": {
129+ // "frameworkReferences": {
130+ // "Microsoft.AspNetCore.App": {
131+ // "privateAssets": "none"
132+ // },
133+ // "Microsoft.NETCore.App": {
134+ // "privateAssets": "all"
135+ // }
136+ // }
137+ // }
138+ // }
139+ // }
140+ //
141+ /// Adds the following dependencies
142+ /// Paths: {
143+ /// "microsoft.aspnetcore.app.ref",
144+ /// "microsoft.netcore.app.ref"
145+ /// }
146+ /// Packages: {
147+ /// "microsoft.aspnetcore.app.ref",
148+ /// "microsoft.netcore.app.ref"
149+ /// }
150+ /// </summary>
151+ private void AddFrameworkDependencies ( JObject json , DependencyContainer dependencies )
152+ {
153+
154+ var frameworks = json
155+ . GetProperty ( "project" ) ?
156+ . GetProperty ( "frameworks" ) ;
157+
158+ if ( frameworks is null )
159+ {
160+ progressMonitor . LogDebug ( "No framework section in assets.json." ) ;
161+ return ;
162+ }
163+
164+ // If there is more than one framework we need to pick just one.
165+ // To ensure stability we pick one based on the lexicographic order of
166+ // the framework names.
167+ var references = frameworks
168+ . Properties ( ) ?
169+ . MaxBy ( p => p . Name ) ?
170+ . Value [ "frameworkReferences" ] as JObject ;
171+
172+ if ( references is null )
173+ {
174+ progressMonitor . LogDebug ( "No framework references in assets.json." ) ;
175+ return ;
176+ }
177+
178+ references
179+ . Properties ( )
180+ . ForEach ( f => dependencies . AddFramework ( $ "{ f . Name } .Ref". ToLowerInvariant ( ) ) ) ;
125181 }
126182
127183 /// <summary>
@@ -135,6 +191,7 @@ public bool TryParse(string json, DependencyContainer dependencies)
135191 {
136192 var obj = JObject . Parse ( json ) ;
137193 AddPackageDependencies ( obj , dependencies ) ;
194+ AddFrameworkDependencies ( obj , dependencies ) ;
138195 return true ;
139196 }
140197 catch ( Exception e )
0 commit comments