@@ -6,6 +6,9 @@ namespace PackageIndexer;
6
6
7
7
internal class CsvUtils
8
8
{
9
+ Dictionary < string , IList < CsvEntry > > _csvDictionary = [ ] ;
10
+ Dictionary < string , int > _packageCounter = [ ] ; // Used for "pac" number in CSV file.
11
+
9
12
static readonly Dictionary < string , string > s_tfmToOpsMoniker = new ( )
10
13
{
11
14
{ "net462" , "netframework-4.6.2-pp" } ,
@@ -18,32 +21,35 @@ internal class CsvUtils
18
21
{ "net7.0" , "net-7.0-pp" } ,
19
22
{ "net8.0" , "net-8.0-pp" } ,
20
23
{ "net9.0" , "net-9.0-pp" } ,
24
+ { "net10.0" , "net-10.0-pp" } ,
21
25
{ "netstandard2.0" , "netstandard-2.0-pp" } ,
22
26
{ "netstandard2.1" , "netstandard-2.1-pp" }
23
27
} ;
24
28
25
- internal static void GenerateCSVFiles ( string indexPackagesPath , string csvPath )
29
+ internal CsvUtils ( )
30
+ {
31
+ // Initialize the two dictionaries.
32
+ foreach ( string moniker in s_tfmToOpsMoniker . Values )
33
+ {
34
+ _csvDictionary . Add ( moniker , [ ] ) ;
35
+ _packageCounter . Add ( moniker , 1 ) ;
36
+ }
37
+ }
38
+
39
+ internal void GenerateCSVFiles ( string indexPackagesPath , string csvPath )
26
40
{
27
41
Console . WriteLine ( "Generating CSV files from package index." ) ;
28
42
29
43
// For each package XML file
30
44
// For each framework
31
45
// Map it to a known framework name
32
- // Generate a collection of that version + later versions of that framework
33
- // (e.g. add 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1 for net462; add 7.0, 8.0, 9.0 for net6.0)
46
+ // Generate a collection of that version + compatible versions (e.g. also add to net9.0 moniker for net8.0 assets,
47
+ // *if* net9.0 isn't already explicitly targeted).
34
48
// Create a dictionary or add to an existing dictionary *for that version* that will become the CSV file -
35
49
// pac<num>,[tfm=<tfm>;includeXml=false]<package name>,<package version>
36
50
// Example: pac01,[tfm=net9.0;includeXml=false]Microsoft.Extensions.Caching.Abstractions,9.0.0-preview.2.24128.5
37
51
// Generate a CSV file from each dictionary
38
52
39
- Dictionary < string , IList < CsvEntry > > csvDictionary = [ ] ;
40
- Dictionary < string , int > packageCounter = [ ] ; // Used for "pac" number in CSV file.
41
- foreach ( string moniker in s_tfmToOpsMoniker . Values )
42
- {
43
- csvDictionary . Add ( moniker , [ ] ) ;
44
- packageCounter . Add ( moniker , 1 ) ;
45
- }
46
-
47
53
// Get all XML files (ignores disabled indexes).
48
54
IEnumerable < string > packageIndexFiles = Directory . EnumerateFiles ( indexPackagesPath , "*.xml" ) ;
49
55
foreach ( string packageIndexFile in packageIndexFiles )
@@ -54,69 +60,69 @@ internal static void GenerateCSVFiles(string indexPackagesPath, string csvPath)
54
60
Console . WriteLine ( $ "Creating CSV entries for package { packageEntry . Name } .") ;
55
61
56
62
// Add to each applicable CSV file.
57
- foreach ( FrameworkEntry frameworkEntry in packageEntry . FrameworkEntries )
63
+ foreach ( string targetFramework in packageEntry . Frameworks )
58
64
{
59
- string framework = frameworkEntry . FrameworkName ;
60
65
string opsMoniker ;
61
- switch ( framework )
66
+ string ? fellThroughFromVersion = null ;
67
+ switch ( targetFramework )
62
68
{
69
+ case "net6.0" :
70
+ opsMoniker = s_tfmToOpsMoniker [ "net6.0" ] ;
71
+ AddCsvEntryToDict ( opsMoniker , packageEntry , "net6.0" ) ;
72
+ if ( ! packageEntry . Frameworks . Contains ( "net7.0" ) )
73
+ {
74
+ // Add to net7.0 moniker since this is a compatible framework.
75
+ fellThroughFromVersion = "net6.0" ;
76
+ goto case "net7.0" ;
77
+ }
78
+ break ;
79
+ case "net7.0" :
80
+ opsMoniker = s_tfmToOpsMoniker [ "net7.0" ] ;
81
+ AddCsvEntryToDict ( opsMoniker , packageEntry , fellThroughFromVersion ?? "net7.0" ) ;
82
+ if ( ! packageEntry . Frameworks . Contains ( "net8.0" ) )
83
+ {
84
+ // Add to net8.0 moniker since this is a compatible framework.
85
+ fellThroughFromVersion = fellThroughFromVersion ?? "net7.0" ;
86
+ goto case "net8.0" ;
87
+ }
88
+ break ;
89
+ case "net8.0" :
90
+ opsMoniker = s_tfmToOpsMoniker [ "net8.0" ] ;
91
+ AddCsvEntryToDict ( opsMoniker , packageEntry , fellThroughFromVersion ?? "net8.0" ) ;
92
+ if ( ! packageEntry . Frameworks . Contains ( "net9.0" ) )
93
+ {
94
+ // Add to net9.0 moniker since this is a compatible framework.
95
+ fellThroughFromVersion = fellThroughFromVersion ?? "net8.0" ;
96
+ goto case "net9.0" ;
97
+ }
98
+ break ;
99
+ case "net9.0" :
100
+ opsMoniker = s_tfmToOpsMoniker [ "net9.0" ] ;
101
+ AddCsvEntryToDict ( opsMoniker , packageEntry , fellThroughFromVersion ?? "net9.0" ) ;
102
+ if ( ! packageEntry . Frameworks . Contains ( "net10.0" ) )
103
+ {
104
+ // Add to net10.0 moniker since this is a compatible framework.
105
+ fellThroughFromVersion = fellThroughFromVersion ?? "net9.0" ;
106
+ goto case "net10.0" ;
107
+ }
108
+ break ;
109
+ case "net10.0" :
110
+ opsMoniker = s_tfmToOpsMoniker [ "net10.0" ] ;
111
+ AddCsvEntryToDict ( opsMoniker , packageEntry , fellThroughFromVersion ?? "net10.0" ) ;
112
+ break ;
63
113
case "net462" :
64
- framework = "net462" ;
65
- opsMoniker = s_tfmToOpsMoniker [ framework ] ;
66
- AddCsvEntryToDict ( opsMoniker , csvDictionary , packageCounter , packageEntry , framework ) ;
67
- goto case "net47" ;
68
114
case "net47" :
69
- framework = "net47" ;
70
- opsMoniker = s_tfmToOpsMoniker [ framework ] ;
71
- AddCsvEntryToDict ( opsMoniker , csvDictionary , packageCounter , packageEntry , framework ) ;
72
- goto case "net471" ;
73
115
case "net471" :
74
- framework = "net471" ;
75
- opsMoniker = s_tfmToOpsMoniker [ framework ] ;
76
- AddCsvEntryToDict ( opsMoniker , csvDictionary , packageCounter , packageEntry , framework ) ;
77
- goto case "net472" ;
78
116
case "net472" :
79
- framework = "net472" ;
80
- opsMoniker = s_tfmToOpsMoniker [ framework ] ;
81
- AddCsvEntryToDict ( opsMoniker , csvDictionary , packageCounter , packageEntry , framework ) ;
82
- goto case "net48" ;
83
117
case "net48" :
84
- framework = "net48" ;
85
- opsMoniker = s_tfmToOpsMoniker [ framework ] ;
86
- AddCsvEntryToDict ( opsMoniker , csvDictionary , packageCounter , packageEntry , framework ) ;
87
- goto case "net481" ;
88
118
case "net481" :
89
- framework = "net481" ;
90
- opsMoniker = s_tfmToOpsMoniker [ framework ] ;
91
- AddCsvEntryToDict ( opsMoniker , csvDictionary , packageCounter , packageEntry , framework ) ;
92
- break ;
93
- case "net6.0" :
94
- framework = "net6.0" ;
95
- opsMoniker = s_tfmToOpsMoniker [ framework ] ;
96
- AddCsvEntryToDict ( opsMoniker , csvDictionary , packageCounter , packageEntry , framework ) ;
97
- goto case "net7.0" ;
98
- case "net7.0" :
99
- framework = "net7.0" ;
100
- opsMoniker = s_tfmToOpsMoniker [ framework ] ;
101
- AddCsvEntryToDict ( opsMoniker , csvDictionary , packageCounter , packageEntry , framework ) ;
102
- goto case "net8.0" ;
103
- case "net8.0" :
104
- framework = "net8.0" ;
105
- opsMoniker = s_tfmToOpsMoniker [ framework ] ;
106
- AddCsvEntryToDict ( opsMoniker , csvDictionary , packageCounter , packageEntry , framework ) ;
107
- goto case "net9.0" ;
108
- case "net9.0" :
109
- framework = "net9.0" ;
110
- opsMoniker = s_tfmToOpsMoniker [ framework ] ;
111
- AddCsvEntryToDict ( opsMoniker , csvDictionary , packageCounter , packageEntry , framework ) ;
112
- break ;
113
119
case "netstandard2.0" :
114
120
case "netstandard2.1" :
115
- opsMoniker = s_tfmToOpsMoniker [ framework ] ;
116
- AddCsvEntryToDict ( opsMoniker , csvDictionary , packageCounter , packageEntry , framework ) ;
121
+ opsMoniker = s_tfmToOpsMoniker [ targetFramework ] ;
122
+ AddCsvEntryToDict ( opsMoniker , packageEntry , targetFramework ) ;
117
123
break ;
118
124
default :
119
- Console . WriteLine ( $ "Ignoring target framework { framework } .") ;
125
+ Console . WriteLine ( $ "Ignoring target framework { targetFramework } .") ;
120
126
break ;
121
127
}
122
128
}
@@ -125,7 +131,7 @@ internal static void GenerateCSVFiles(string indexPackagesPath, string csvPath)
125
131
// Create the directory.
126
132
Directory . CreateDirectory ( csvPath ) ;
127
133
128
- foreach ( KeyValuePair < string , IList < CsvEntry > > tfm in csvDictionary )
134
+ foreach ( KeyValuePair < string , IList < CsvEntry > > tfm in _csvDictionary )
129
135
{
130
136
// CSV file names must match the folder name in the "binaries" repo:
131
137
// e.g. netframework-4.6.2-pp, netstandard-2.0-pp, net-8.0-pp.
@@ -148,12 +154,10 @@ internal static void GenerateCSVFiles(string indexPackagesPath, string csvPath)
148
154
csv . WriteRecords ( tfm . Value ) ;
149
155
}
150
156
151
- static void AddCsvEntryToDict (
157
+ void AddCsvEntryToDict (
152
158
string opsMoniker ,
153
- Dictionary < string , IList < CsvEntry > > csvDictionary ,
154
- Dictionary < string , int > packageCounter ,
155
159
PackageEntry packageEntry ,
156
- string frameworkName
160
+ string targetFramework
157
161
)
158
162
{
159
163
// Special case for packages from dotnet/extensions repo - include XML files.
@@ -166,29 +170,31 @@ string frameworkName
166
170
bool includeXml = reposToIncludeXmlComments . Contains ( packageEntry . Repository ) ;
167
171
168
172
// Except don't include XML file for Microsoft.Extensions.Diagnostics.ResourceMonitoring
169
- // See https://github.com/dotnet/dotnet-api-docs/pull/10395#discussion_r1758128787.
170
- if ( string . Equals (
171
- packageEntry . Name ,
172
- "Microsoft.Extensions.Diagnostics.ResourceMonitoring" ,
173
- StringComparison . InvariantCultureIgnoreCase ) )
173
+ // (see https://github.com/dotnet/dotnet-api-docs/pull/10395#discussion_r1758128787)
174
+ // or Microsoft.Extensions.HttpClient.SocketHandling (deprecated package with docs that cause warnings).
175
+ if ( string . Equals ( packageEntry . Name , "Microsoft.Extensions.Diagnostics.ResourceMonitoring" , StringComparison . InvariantCultureIgnoreCase ) ||
176
+ string . Equals ( packageEntry . Name , "Microsoft.Extensions.Diagnostics.ResourceMonitoring" , StringComparison . InvariantCultureIgnoreCase ) )
177
+ {
174
178
includeXml = false ;
179
+ }
175
180
176
181
// Special case for newer assemblies - include XML documentation files.
177
182
if ( PlatformPackageDefinition . PackagesWithTruthDocs . Contains ( packageEntry . Name ) )
178
183
includeXml = true ;
179
184
180
- string squareBrackets = $ "[tfm={ frameworkName } ;includeXml={ includeXml } ]";
185
+ string squareBrackets = $ "[tfm={ targetFramework } ;includeXml={ includeXml } ]";
181
186
182
187
// Special case for System.ServiceModel.Primitives - use reference assemblies.
183
188
if ( string . Equals ( packageEntry . Name , "System.ServiceModel.Primitives" , StringComparison . InvariantCultureIgnoreCase ) )
184
- squareBrackets = $ "[tfm={ frameworkName } ;includeXml={ includeXml } ;libpath=ref]";
189
+ squareBrackets = $ "[tfm={ targetFramework } ;includeXml={ includeXml } ;libpath=ref]";
185
190
186
191
CsvEntry entry = CsvEntry . Create (
187
- string . Concat ( "pac" , packageCounter [ opsMoniker ] ++ ) ,
192
+ string . Concat ( "pac" , _packageCounter [ opsMoniker ] ++ ) ,
188
193
string . Concat ( squareBrackets , packageEntry . Name ) ,
189
194
packageEntry . Version
190
195
) ;
191
- csvDictionary [ opsMoniker ] . Add ( entry ) ;
196
+
197
+ _csvDictionary [ opsMoniker ] . Add ( entry ) ;
192
198
}
193
199
}
194
200
}
0 commit comments