dependabot-nuget 0.287.0 → 0.289.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/helpers/lib/NuGetUpdater/.gitignore +1 -0
  3. data/helpers/lib/NuGetUpdater/Directory.Build.targets +17 -0
  4. data/helpers/lib/NuGetUpdater/Directory.Packages.props +26 -17
  5. data/helpers/lib/NuGetUpdater/NuGetProjects/NuGet.Packaging/NuGet.Packaging.csproj +0 -1
  6. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/DiscoverCommand.cs +7 -3
  7. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/RunCommand.cs +1 -1
  8. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Analyze.cs +3 -1
  9. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Discover.cs +88 -47
  10. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/AnalyzeWorker.cs +31 -16
  11. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/CompatabilityChecker.cs +1 -1
  12. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/RequirementArrayConverter.cs +39 -0
  13. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/VersionFinder.cs +1 -1
  14. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Clone/ShellGitCommandHandler.cs +1 -1
  15. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/DependencyDiscovery.props +7 -0
  16. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/DependencyDiscovery.targets +10 -0
  17. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/DiscoveryWorker.cs +64 -53
  18. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/DotNetToolsJsonDiscovery.cs +2 -2
  19. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/GlobalJsonDiscovery.cs +2 -2
  20. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/PackagesConfigDiscovery.cs +17 -5
  21. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/PackagesConfigDiscoveryResult.cs +3 -1
  22. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/ProjectDiscoveryResult.cs +3 -0
  23. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/SdkProjectDiscovery.cs +429 -12
  24. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/WorkspaceDiscoveryResult.cs +0 -1
  25. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/ExperimentsManager.cs +12 -2
  26. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Files/JsonBuildFile.cs +1 -1
  27. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/FrameworkChecker/CompatabilityChecker.cs +2 -2
  28. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/NuGetUpdater.Core.csproj +7 -2
  29. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/Job.cs +23 -0
  30. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/RunWorker.cs +43 -58
  31. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/TargetFrameworkReporter.targets +13 -0
  32. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/BindingRedirectManager.cs +13 -43
  33. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/DotNetToolsJsonUpdater.cs +4 -4
  34. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/GlobalJsonUpdater.cs +5 -5
  35. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/LockFileUpdater.cs +3 -10
  36. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/PackageReferenceUpdater.cs +40 -33
  37. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/PackagesConfigUpdater.cs +12 -11
  38. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/UpdaterWorker.cs +16 -12
  39. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/CollectionExtensions.cs +17 -0
  40. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/ConsoleLogger.cs +1 -1
  41. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/DependencyConflictResolver.cs +19 -19
  42. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/ILogger.cs +11 -1
  43. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/MSBuildHelper.cs +74 -20
  44. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/NuGetHelper.cs +1 -17
  45. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/PathComparer.cs +31 -0
  46. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/PathHelper.cs +46 -10
  47. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/ProjectHelper.cs +96 -0
  48. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/AnalyzeWorkerTests.cs +135 -3
  49. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTestBase.cs +71 -38
  50. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.PackagesConfig.cs +66 -4
  51. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.Proj.cs +11 -5
  52. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.Project.cs +808 -222
  53. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.cs +477 -97
  54. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/ExpectedDiscoveryResults.cs +5 -9
  55. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/SdkProjectDiscoveryTests.cs +494 -0
  56. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/MockNuGetPackage.cs +46 -1
  57. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/NuGetUpdater.Core.Test.csproj +0 -1
  58. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/RunWorkerTests.cs +401 -77
  59. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/SerializationTests.cs +35 -2
  60. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdatedDependencyListTests.cs +60 -2
  61. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/TemporaryDirectory.cs +3 -2
  62. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/TestLogger.cs +1 -1
  63. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/BindingRedirectsTests.cs +1 -1
  64. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTestBase.cs +8 -4
  65. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.PackageReference.cs +40 -0
  66. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.PackagesConfig.cs +1 -1
  67. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/AssertEx.cs +1 -1
  68. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/LinuxOnlyAttribute.cs +12 -0
  69. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/MSBuildHelperTests.cs +8 -5
  70. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/PathHelperTests.cs +49 -3
  71. data/lib/dependabot/nuget/analysis/analysis_json_reader.rb +3 -1
  72. data/lib/dependabot/nuget/file_fetcher.rb +12 -393
  73. data/lib/dependabot/nuget/file_parser.rb +23 -54
  74. data/lib/dependabot/nuget/file_updater.rb +21 -16
  75. data/lib/dependabot/nuget/native_discovery/native_dependency_file_discovery.rb +2 -9
  76. data/lib/dependabot/nuget/native_discovery/native_discovery_json_reader.rb +183 -80
  77. data/lib/dependabot/nuget/native_discovery/native_project_discovery.rb +25 -3
  78. data/lib/dependabot/nuget/native_discovery/native_workspace_discovery.rb +1 -11
  79. data/lib/dependabot/nuget/native_helpers.rb +13 -4
  80. data/lib/dependabot/nuget/native_update_checker/native_update_checker.rb +17 -4
  81. metadata +15 -12
  82. data/helpers/lib/NuGetUpdater/NuGetProjects/Directory.Packages.props +0 -29
  83. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/RequirementConverter.cs +0 -17
  84. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/DirectoryPackagesPropsDiscovery.cs +0 -69
  85. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/DirectoryPackagesPropsDiscoveryResult.cs +0 -11
  86. data/lib/dependabot/nuget/file_fetcher/import_paths_finder.rb +0 -73
  87. data/lib/dependabot/nuget/file_fetcher/sln_project_paths_finder.rb +0 -60
  88. data/lib/dependabot/nuget/native_discovery/native_directory_packages_props_discovery.rb +0 -44
@@ -7,33 +7,40 @@ public partial class DiscoveryWorkerTests
7
7
  public class Projects : DiscoveryWorkerTestBase
8
8
  {
9
9
  [Fact]
10
- public async Task ReturnsPackageReferencesMissingVersions()
10
+ public async Task TargetFrameworksAreHonoredInConditions_DirectDiscovery()
11
11
  {
12
12
  await TestDiscoveryAsync(
13
- packages: [],
13
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = true },
14
+ packages:
15
+ [
16
+ MockNuGetPackage.CreateSimplePackage("Package.A", "1.0.0", "net7.0"),
17
+ MockNuGetPackage.CreateSimplePackage("Package.B", "2.0.0", "net7.0"),
18
+ ],
14
19
  workspacePath: "",
15
20
  files: [
16
21
  ("myproj.csproj", """
17
22
  <Project Sdk="Microsoft.NET.Sdk">
18
23
  <PropertyGroup>
19
- <Description>Nancy is a lightweight web framework for the .Net platform, inspired by Sinatra. Nancy aim at delivering a low ceremony approach to building light, fast web applications.</Description>
20
24
  <TargetFrameworks>net7.0;net8.0</TargetFrameworks>
21
25
  </PropertyGroup>
22
-
23
- <ItemGroup>
24
- <EmbeddedResource Include="ErrorHandling\Resources\**\*.*;Diagnostics\Resources\**\*.*;Diagnostics\Views\**\*.*" Exclude="bin\**;obj\**;**\*.xproj;packages\**;@(EmbeddedResource)" />
25
- </ItemGroup>
26
-
27
26
  <ItemGroup Condition=" '$(TargetFramework)' == 'net7.0' ">
28
- <PackageReference Include="Package.A" Version="1.1.1" />
27
+ <PackageReference Include="Package.A" />
29
28
  <PackageReference Include="Package.B" />
30
29
  </ItemGroup>
31
-
32
- <ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
33
- <Reference Include="Package.C" />
30
+ </Project>
31
+ """),
32
+ ("Directory.Build.props", "<Project />"),
33
+ ("Directory.Packages.props", """
34
+ <Project>
35
+ <PropertyGroup>
36
+ <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
37
+ </PropertyGroup>
38
+ <ItemGroup>
39
+ <PackageVersion Include="Package.A" Version="1.0.0" />
40
+ <PackageVersion Include="Package.B" Version="2.0.0" />
34
41
  </ItemGroup>
35
42
  </Project>
36
- """)
43
+ """),
37
44
  ],
38
45
  expectedResult: new()
39
46
  {
@@ -42,66 +49,58 @@ public partial class DiscoveryWorkerTests
42
49
  new()
43
50
  {
44
51
  FilePath = "myproj.csproj",
45
- ExpectedDependencyCount = 3,
46
52
  Dependencies = [
47
- new("Microsoft.NET.Sdk", null, DependencyType.MSBuildSdk),
48
- new("Package.A", "1.1.1", DependencyType.PackageReference, TargetFrameworks: ["net7.0", "net8.0"], IsDirect: true),
49
- new("Package.B", "", DependencyType.PackageReference, TargetFrameworks: ["net7.0", "net8.0"], IsDirect: true),
53
+ new("Package.A", "1.0.0", DependencyType.PackageReference, TargetFrameworks: ["net7.0"], IsDirect: true),
54
+ new("Package.B", "2.0.0", DependencyType.PackageReference, TargetFrameworks: ["net7.0"], IsDirect: true),
50
55
  ],
51
56
  Properties = [
52
- new("Description", "Nancy is a lightweight web framework for the .Net platform, inspired by Sinatra. Nancy aim at delivering a low ceremony approach to building light, fast web applications.", "myproj.csproj"),
53
57
  new("TargetFrameworks", "net7.0;net8.0", "myproj.csproj"),
54
58
  ],
55
- TargetFrameworks = ["net7.0", "net8.0"],
59
+ TargetFrameworks = ["net7.0"], // net8.0 has no packages and is not reported
56
60
  ReferencedProjectPaths = [],
57
- }
61
+ ImportedFiles = [
62
+ "Directory.Build.props",
63
+ "Directory.Packages.props",
64
+ ],
65
+ AdditionalFiles = [],
66
+ },
58
67
  ],
59
68
  }
60
69
  );
61
70
  }
62
71
 
63
72
  [Fact]
64
- public async Task WithDirectoryPackagesProps()
73
+ public async Task TargetFrameworksAreHonoredInConditions_TemporaryProjectDiscovery()
65
74
  {
66
75
  await TestDiscoveryAsync(
67
- packages: [],
76
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = false },
77
+ packages:
78
+ [
79
+ MockNuGetPackage.CreateSimplePackage("Package.A", "1.0.0", "net7.0"),
80
+ MockNuGetPackage.CreateSimplePackage("Package.B", "2.0.0", "net7.0"),
81
+ ],
68
82
  workspacePath: "",
69
83
  files: [
70
84
  ("myproj.csproj", """
71
85
  <Project Sdk="Microsoft.NET.Sdk">
72
86
  <PropertyGroup>
73
- <Description>Nancy is a lightweight web framework for the .Net platform, inspired by Sinatra. Nancy aim at delivering a low ceremony approach to building light, fast web applications.</Description>
74
87
  <TargetFrameworks>net7.0;net8.0</TargetFrameworks>
75
88
  </PropertyGroup>
76
-
77
- <ItemGroup>
78
- <EmbeddedResource Include="ErrorHandling\Resources\**\*.*;Diagnostics\Resources\**\*.*;Diagnostics\Views\**\*.*" Exclude="bin\**;obj\**;**\*.xproj;packages\**;@(EmbeddedResource)" />
79
- </ItemGroup>
80
-
81
89
  <ItemGroup Condition=" '$(TargetFramework)' == 'net7.0' ">
82
- <PackageReference Include="Microsoft.Extensions.DependencyModel" Version="1.1.1" />
83
- <PackageReference Include="Microsoft.AspNetCore.App" />
84
- <PackageReference Include="Microsoft.NET.Test.Sdk" Version="" />
85
- <PackageReference Include="Microsoft.Extensions.PlatformAbstractions" version="1.1.0"></PackageReference>
86
- <PackageReference Include="System.Collections.Specialized"><Version>4.3.0</Version></PackageReference>
87
- </ItemGroup>
88
-
89
- <ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
90
- <Reference Include="System.Xml" />
90
+ <PackageReference Include="Package.A" />
91
+ <PackageReference Include="Package.B" />
91
92
  </ItemGroup>
92
93
  </Project>
93
94
  """),
94
95
  ("Directory.Build.props", "<Project />"),
95
96
  ("Directory.Packages.props", """
96
- <Project Sdk="Microsoft.NET.Sdk">
97
+ <Project>
97
98
  <PropertyGroup>
98
99
  <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
99
100
  </PropertyGroup>
100
101
  <ItemGroup>
101
- <PackageVersion Include="System.Lycos" Version="3.23.3" />
102
- <PackageVersion Include="System.AskJeeves" Version="2.2.2" />
103
- <PackageVersion Include="System.Google" Version="0.1.0-beta.3" />
104
- <PackageVersion Include="System.WebCrawler" Version="1.1.1" />
102
+ <PackageVersion Include="Package.A" Version="1.0.0" />
103
+ <PackageVersion Include="Package.B" Version="2.0.0" />
105
104
  </ItemGroup>
106
105
  </Project>
107
106
  """),
@@ -109,81 +108,138 @@ public partial class DiscoveryWorkerTests
109
108
  expectedResult: new()
110
109
  {
111
110
  Path = "",
112
- ExpectedProjectCount = 2,
113
111
  Projects = [
114
112
  new()
115
113
  {
116
114
  FilePath = "myproj.csproj",
117
- ExpectedDependencyCount = 6,
118
115
  Dependencies = [
119
- new("Microsoft.Extensions.DependencyModel", "1.1.1", DependencyType.PackageReference, TargetFrameworks: ["net7.0", "net8.0"], IsDirect: true),
120
- new("Microsoft.AspNetCore.App", "", DependencyType.PackageReference, TargetFrameworks: ["net7.0", "net8.0"], IsDirect: true),
121
- new("Microsoft.NET.Test.Sdk", "", DependencyType.PackageReference, TargetFrameworks: ["net7.0", "net8.0"], IsDirect: true),
122
- new("Microsoft.NET.Sdk", null, DependencyType.MSBuildSdk),
123
- new("Microsoft.Extensions.PlatformAbstractions", "1.1.0", DependencyType.PackageReference, TargetFrameworks: ["net7.0", "net8.0"], IsDirect: true),
124
- new("System.Collections.Specialized", "4.3.0", DependencyType.PackageReference, TargetFrameworks: ["net7.0", "net8.0"], IsDirect: true),
116
+ new("Package.A", "1.0.0", DependencyType.PackageReference, TargetFrameworks: ["net7.0", "net8.0"], IsDirect: true),
117
+ new("Package.B", "2.0.0", DependencyType.PackageReference, TargetFrameworks: ["net7.0", "net8.0"], IsDirect: true),
125
118
  ],
126
119
  Properties = [
127
- new("Description", "Nancy is a lightweight web framework for the .Net platform, inspired by Sinatra. Nancy aim at delivering a low ceremony approach to building light, fast web applications.", "myproj.csproj"),
128
120
  new("ManagePackageVersionsCentrally", "true", "Directory.Packages.props"),
129
121
  new("TargetFrameworks", "net7.0;net8.0", "myproj.csproj"),
130
122
  ],
131
123
  TargetFrameworks = ["net7.0", "net8.0"],
124
+ ReferencedProjectPaths = [],
125
+ ImportedFiles = [
126
+ "Directory.Build.props",
127
+ "Directory.Packages.props",
128
+ ],
129
+ AdditionalFiles = [],
132
130
  },
133
131
  ],
134
- DirectoryPackagesProps = new()
135
- {
136
- FilePath = "Directory.Packages.props",
137
- Dependencies = [
138
- new("System.Lycos", "3.23.3", DependencyType.PackageVersion, IsDirect: true),
139
- new("System.AskJeeves", "2.2.2", DependencyType.PackageVersion, IsDirect: true),
140
- new("System.Google", "0.1.0-beta.3", DependencyType.PackageVersion, IsDirect: true),
141
- new("System.WebCrawler", "1.1.1", DependencyType.PackageVersion, IsDirect: true),
142
- new("Microsoft.NET.Sdk", null, DependencyType.MSBuildSdk),
143
- ],
144
- },
145
132
  }
146
133
  );
147
134
  }
148
135
 
149
136
  [Fact]
150
- public async Task WithDirectoryBuildPropsAndTargets()
137
+ public async Task WithDirectoryBuildPropsAndTargets_DirectDiscovery()
151
138
  {
152
139
  await TestDiscoveryAsync(
153
- packages: [],
140
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = true },
141
+ packages:
142
+ [
143
+ MockNuGetPackage.CreateSimplePackage("Package.A", "1.2.3", "net8.0"),
144
+ MockNuGetPackage.CreateSimplePackage("Package.B", "4.5.6", "net8.0"),
145
+ ],
154
146
  workspacePath: "",
155
147
  files: [
156
148
  ("project.csproj", """
157
149
  <Project Sdk="Microsoft.NET.Sdk">
158
-
159
150
  <PropertyGroup>
160
151
  <OutputType>Exe</OutputType>
161
- <TargetFramework>net7.0</TargetFramework>
152
+ <TargetFramework>net8.0</TargetFramework>
162
153
  <ImplicitUsings>enable</ImplicitUsings>
163
154
  <Nullable>enable</Nullable>
164
155
  </PropertyGroup>
165
-
166
156
  </Project>
167
157
  """),
168
158
  ("Directory.Build.props", """
169
159
  <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
170
-
171
160
  <ItemGroup>
172
- <PackageReference Include="NuGet.Versioning" Version="6.1.0" />
161
+ <PackageReference Include="Package.A" Version="1.2.3" />
173
162
  </ItemGroup>
174
-
175
163
  </Project>
176
164
  """),
177
165
  ("Directory.Build.targets", """
178
166
  <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
179
-
180
167
  <ItemGroup>
181
- <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.0">
168
+ <PackageReference Include="Package.B" Version="4.5.6">
182
169
  <PrivateAssets>all</PrivateAssets>
183
170
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
184
171
  </PackageReference>
185
172
  </ItemGroup>
173
+ </Project>
174
+ """),
175
+ ],
176
+ expectedResult: new()
177
+ {
178
+ Path = "",
179
+ Projects = [
180
+ new()
181
+ {
182
+ FilePath = "project.csproj",
183
+ Dependencies = [
184
+ new("Package.A", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
185
+ new("Package.B", "4.5.6", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
186
+ ],
187
+ Properties = [
188
+ new("ImplicitUsings", "enable", "project.csproj"),
189
+ new("Nullable", "enable", "project.csproj"),
190
+ new("OutputType", "Exe", "project.csproj"),
191
+ new("TargetFramework", "net8.0", "project.csproj"),
192
+ ],
193
+ TargetFrameworks = ["net8.0"],
194
+ ReferencedProjectPaths = [],
195
+ ImportedFiles = [
196
+ "Directory.Build.props",
197
+ "Directory.Build.targets",
198
+ ],
199
+ AdditionalFiles = [],
200
+ }
201
+ ],
202
+ }
203
+ );
204
+ }
186
205
 
206
+ [Fact]
207
+ public async Task WithDirectoryBuildPropsAndTargets_TemporaryProjectDiscovery()
208
+ {
209
+ await TestDiscoveryAsync(
210
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = false },
211
+ packages:
212
+ [
213
+ MockNuGetPackage.CreateSimplePackage("Package.A", "1.2.3", "net8.0"),
214
+ MockNuGetPackage.CreateSimplePackage("Package.B", "4.5.6", "net8.0"),
215
+ ],
216
+ workspacePath: "",
217
+ files: [
218
+ ("project.csproj", """
219
+ <Project Sdk="Microsoft.NET.Sdk">
220
+ <PropertyGroup>
221
+ <OutputType>Exe</OutputType>
222
+ <TargetFramework>net8.0</TargetFramework>
223
+ <ImplicitUsings>enable</ImplicitUsings>
224
+ <Nullable>enable</Nullable>
225
+ </PropertyGroup>
226
+ </Project>
227
+ """),
228
+ ("Directory.Build.props", """
229
+ <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
230
+ <ItemGroup>
231
+ <PackageReference Include="Package.A" Version="1.2.3" />
232
+ </ItemGroup>
233
+ </Project>
234
+ """),
235
+ ("Directory.Build.targets", """
236
+ <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
237
+ <ItemGroup>
238
+ <PackageReference Include="Package.B" Version="4.5.6">
239
+ <PrivateAssets>all</PrivateAssets>
240
+ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
241
+ </PackageReference>
242
+ </ItemGroup>
187
243
  </Project>
188
244
  """),
189
245
  ],
@@ -194,38 +250,131 @@ public partial class DiscoveryWorkerTests
194
250
  new()
195
251
  {
196
252
  FilePath = "project.csproj",
197
- ExpectedDependencyCount = 3,
198
253
  Dependencies = [
199
- new("NuGet.Versioning", "6.1.0", DependencyType.PackageReference, TargetFrameworks: ["net7.0"], IsDirect: false),
200
- new("Microsoft.CodeAnalysis.Analyzers", "3.3.0", DependencyType.PackageReference, TargetFrameworks: ["net7.0"], IsDirect: false),
254
+ new("Package.A", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net8.0"]),
255
+ new("Package.B", "4.5.6", DependencyType.PackageReference, TargetFrameworks: ["net8.0"]),
201
256
  ],
202
257
  Properties = [
203
258
  new("ImplicitUsings", "enable", "project.csproj"),
204
259
  new("Nullable", "enable", "project.csproj"),
205
260
  new("OutputType", "Exe", "project.csproj"),
206
- new("TargetFramework", "net7.0", "project.csproj"),
261
+ new("TargetFramework", "net8.0", "project.csproj"),
207
262
  ],
208
- TargetFrameworks = ["net7.0"],
209
- },
263
+ TargetFrameworks = ["net8.0"],
264
+ ReferencedProjectPaths = [],
265
+ ImportedFiles = [
266
+ "Directory.Build.props",
267
+ "Directory.Build.targets"
268
+ ],
269
+ AdditionalFiles = [],
270
+ }
271
+ ],
272
+ }
273
+ );
274
+ }
275
+
276
+ [Fact]
277
+ public async Task WithGlobalPackageReference_DirectDiscovery()
278
+ {
279
+ await TestDiscoveryAsync(
280
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = true },
281
+ packages:
282
+ [
283
+ MockNuGetPackage.CreateSimplePackage("Global.Package", "1.2.3", "net8.0"),
284
+ ],
285
+ workspacePath: "",
286
+ files:
287
+ [
288
+ ("project.csproj", """
289
+ <Project Sdk="Microsoft.NET.Sdk">
290
+ <PropertyGroup>
291
+ <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
292
+ <TargetFramework>net8.0</TargetFramework>
293
+ </PropertyGroup>
294
+ </Project>
295
+ """),
296
+ ("Directory.Packages.props", """
297
+ <Project>
298
+ <ItemGroup>
299
+ <GlobalPackageReference Include="Global.Package" Version="1.2.3" />
300
+ </ItemGroup>
301
+ </Project>
302
+ """),
303
+ ],
304
+ expectedResult: new()
305
+ {
306
+ Path = "",
307
+ Projects = [
210
308
  new()
211
309
  {
212
- FilePath = "Directory.Build.props",
213
- ExpectedDependencyCount = 1,
310
+ FilePath = "project.csproj",
214
311
  Dependencies = [
215
- new("NuGet.Versioning", "6.1.0", DependencyType.PackageReference, IsDirect: true),
312
+ new("Global.Package", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
216
313
  ],
217
- Properties = [],
218
- TargetFrameworks = [],
314
+ Properties = [
315
+ new("ManagePackageVersionsCentrally", "true", "project.csproj"),
316
+ new("TargetFramework", "net8.0", "project.csproj"),
317
+ ],
318
+ TargetFrameworks = ["net8.0"],
319
+ ReferencedProjectPaths = [],
320
+ ImportedFiles = [
321
+ "Directory.Packages.props"
322
+ ],
323
+ AdditionalFiles = [],
219
324
  },
325
+ ],
326
+ }
327
+ );
328
+ }
329
+
330
+ [Fact]
331
+ public async Task WithGlobalPackageReference_TemporaryProjectDiscovery()
332
+ {
333
+ await TestDiscoveryAsync(
334
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = false },
335
+ packages:
336
+ [
337
+ MockNuGetPackage.CreateSimplePackage("Global.Package", "1.2.3", "net8.0"),
338
+ ],
339
+ workspacePath: "",
340
+ files:
341
+ [
342
+ ("project.csproj", """
343
+ <Project Sdk="Microsoft.NET.Sdk">
344
+ <PropertyGroup>
345
+ <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
346
+ <TargetFramework>net8.0</TargetFramework>
347
+ </PropertyGroup>
348
+ </Project>
349
+ """),
350
+ ("Directory.Packages.props", """
351
+ <Project>
352
+ <ItemGroup>
353
+ <GlobalPackageReference Include="Global.Package" Version="1.2.3" />
354
+ </ItemGroup>
355
+ </Project>
356
+ """),
357
+ ],
358
+ expectedResult: new()
359
+ {
360
+ Path = "",
361
+ Projects = [
220
362
  new()
221
363
  {
222
- FilePath = "Directory.Build.targets",
223
- ExpectedDependencyCount = 1,
364
+ FilePath = "project.csproj",
224
365
  Dependencies = [
225
- new("Microsoft.CodeAnalysis.Analyzers", "3.3.0", DependencyType.PackageReference, IsDirect: true),
366
+ new("Global.Package", "1.2.3", DependencyType.GlobalPackageReference, TargetFrameworks: ["net8.0"]),
367
+ ],
368
+ Properties = [
369
+ new("ManagePackageVersionsCentrally", "true", "project.csproj"),
370
+ new("TargetFramework", "net8.0", "project.csproj"),
371
+ ],
372
+ TargetFrameworks = ["net8.0"],
373
+ ReferencedProjectPaths = [],
374
+ ImportedFiles = [
375
+ "Directory.Packages.props"
226
376
  ],
227
- Properties = [],
228
- TargetFrameworks = [],
377
+ AdditionalFiles = [],
229
378
  },
230
379
  ],
231
380
  }
@@ -233,134 +382,271 @@ public partial class DiscoveryWorkerTests
233
382
  }
234
383
 
235
384
  [Fact]
236
- public async Task WithPackagesProps()
385
+ public async Task WithPackagesProps_DirectDiscovery()
237
386
  {
238
- var nugetPackagesDirectory = Environment.GetEnvironmentVariable("NUGET_PACKAGES");
239
- var nugetHttpCacheDirectory = Environment.GetEnvironmentVariable("NUGET_HTTP_CACHE_PATH");
240
-
241
- try
242
- {
243
- using var temp = new TemporaryDirectory();
244
-
245
- // It is important to have empty NuGet caches for this test, so override them with temp directories.
246
- var tempNuGetPackagesDirectory = Path.Combine(temp.DirectoryPath, ".nuget", "packages");
247
- Environment.SetEnvironmentVariable("NUGET_PACKAGES", tempNuGetPackagesDirectory);
248
- var tempNuGetHttpCacheDirectory = Path.Combine(temp.DirectoryPath, ".nuget", "v3-cache");
249
- Environment.SetEnvironmentVariable("NUGET_HTTP_CACHE_PATH", tempNuGetHttpCacheDirectory);
250
-
251
- await TestDiscoveryAsync(
252
- packages:
253
- [
254
- MockNuGetPackage.CentralPackageVersionsPackage,
387
+ await TestDiscoveryAsync(
388
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = true },
389
+ packages:
390
+ [
391
+ MockNuGetPackage.CentralPackageVersionsPackage,
392
+ MockNuGetPackage.CreateSimplePackage("Package.A", "1.2.3", "net7.0"),
393
+ MockNuGetPackage.CreateSimplePackage("Package.B", "4.5.6", "net7.0"),
394
+ MockNuGetPackage.CreateSimplePackage("Global.Package", "7.8.9", "net7.0"),
395
+ ],
396
+ workspacePath: "",
397
+ files: [
398
+ ("myproj.csproj", """
399
+ <Project Sdk="Microsoft.NET.Sdk">
400
+ <PropertyGroup>
401
+ <TargetFramework>net7.0</TargetFramework>
402
+ </PropertyGroup>
403
+ <ItemGroup>
404
+ <PackageReference Include="Package.A" Version="1.2.3" />
405
+ <PackageReference Include="Package.B" />
406
+ </ItemGroup>
407
+ </Project>
408
+ """),
409
+ ("Packages.props", """
410
+ <Project Sdk="Microsoft.NET.Sdk">
411
+ <ItemGroup>
412
+ <GlobalPackageReference Include="Global.Package" Version="7.8.9" />
413
+ <PackageReference Update="@(GlobalPackageReference)" PrivateAssets="Build" />
414
+ <PackageReference Update="Package.B" Version="4.5.6" />
415
+ </ItemGroup>
416
+ </Project>
417
+ """),
418
+ ("Directory.Build.targets", """
419
+ <Project>
420
+ <!-- this forces `Packages.props` to be imported -->
421
+ <Sdk Name="Microsoft.Build.CentralPackageVersions" Version="2.1.3" />
422
+ </Project>
423
+ """),
424
+ ],
425
+ expectedResult: new()
426
+ {
427
+ Path = "",
428
+ Projects = [
429
+ new()
430
+ {
431
+ FilePath = "myproj.csproj",
432
+ Dependencies = [
433
+ new("Package.A", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net7.0"], IsDirect: true),
434
+ new("Package.B", "4.5.6", DependencyType.PackageReference, TargetFrameworks: ["net7.0"], IsDirect: true),
435
+ new("Global.Package", "7.8.9", DependencyType.PackageReference, TargetFrameworks: ["net7.0"], IsDirect: true),
436
+ ],
437
+ Properties = [
438
+ new("TargetFramework", "net7.0", "myproj.csproj"),
439
+ ],
440
+ TargetFrameworks = ["net7.0"],
441
+ ReferencedProjectPaths = [],
442
+ ImportedFiles = [
443
+ "Directory.Build.targets",
444
+ "NUGET_PACKAGES/microsoft.build.centralpackageversions/2.1.3/Sdk/Sdk.props", // this is an artifact of the package cache existing next to the csproj
445
+ "NUGET_PACKAGES/microsoft.build.centralpackageversions/2.1.3/Sdk/Sdk.targets", // this is an artifact of the package cache existing next to the csproj
446
+ "Packages.props",
447
+ ],
448
+ AdditionalFiles = [],
449
+ },
255
450
  ],
256
- workspacePath: "",
257
- files: [
258
- ("myproj.csproj", """
259
- <Project Sdk="Microsoft.NET.Sdk">
260
- <PropertyGroup>
261
- <Description>Nancy is a lightweight web framework for the .Net platform, inspired by Sinatra. Nancy aim at delivering a low ceremony approach to building light, fast web applications.</Description>
262
- <TargetFrameworks>net7.0;net8.0</TargetFrameworks>
263
- </PropertyGroup>
451
+ }
452
+ );
453
+ }
264
454
 
265
- <ItemGroup>
266
- <EmbeddedResource Include="ErrorHandling\Resources\**\*.*;Diagnostics\Resources\**\*.*;Diagnostics\Views\**\*.*" Exclude="bin\**;obj\**;**\*.xproj;packages\**;@(EmbeddedResource)" />
267
- </ItemGroup>
455
+ [Fact]
456
+ public async Task WithPackagesProps_TemporaryProjectDiscovery()
457
+ {
458
+ await TestDiscoveryAsync(
459
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = false },
460
+ packages:
461
+ [
462
+ MockNuGetPackage.CentralPackageVersionsPackage,
463
+ MockNuGetPackage.CreateSimplePackage("Package.A", "1.2.3", "net7.0"),
464
+ MockNuGetPackage.CreateSimplePackage("Package.B", "4.5.6", "net7.0"),
465
+ MockNuGetPackage.CreateSimplePackage("Global.Package", "7.8.9", "net7.0"),
466
+ ],
467
+ workspacePath: "",
468
+ files: [
469
+ ("myproj.csproj", """
470
+ <Project Sdk="Microsoft.NET.Sdk">
471
+ <PropertyGroup>
472
+ <TargetFramework>net7.0</TargetFramework>
473
+ </PropertyGroup>
474
+ <ItemGroup>
475
+ <PackageReference Include="Package.A" Version="1.2.3" />
476
+ <PackageReference Include="Package.B" />
477
+ </ItemGroup>
478
+ </Project>
479
+ """),
480
+ ("Packages.props", """
481
+ <Project Sdk="Microsoft.NET.Sdk">
482
+ <ItemGroup>
483
+ <GlobalPackageReference Include="Global.Package" Version="7.8.9" />
484
+ <PackageReference Update="@(GlobalPackageReference)" PrivateAssets="Build" />
485
+ <PackageReference Update="Package.B" Version="4.5.6" />
486
+ </ItemGroup>
487
+ </Project>
488
+ """),
489
+ ("Directory.Build.targets", """
490
+ <Project>
491
+ <!-- this forces `Packages.props` to be imported -->
492
+ <Sdk Name="Microsoft.Build.CentralPackageVersions" Version="2.1.3" />
493
+ </Project>
494
+ """),
495
+ ],
496
+ expectedResult: new()
497
+ {
498
+ Path = "",
499
+ Projects = [
500
+ new()
501
+ {
502
+ FilePath = "myproj.csproj",
503
+ ExpectedDependencyCount = 4,
504
+ Dependencies = [
505
+ new("Package.A", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net7.0"], IsDirect: true),
506
+ new("Package.B", "4.5.6", DependencyType.PackageReference, TargetFrameworks: ["net7.0"], IsDirect: true),
507
+ new("Global.Package", "7.8.9", DependencyType.GlobalPackageReference, TargetFrameworks: ["net7.0"]),
508
+ ],
509
+ Properties = [
510
+ new("TargetFramework", "net7.0", "myproj.csproj"),
511
+ ],
512
+ TargetFrameworks = ["net7.0"],
513
+ ReferencedProjectPaths = [],
514
+ ImportedFiles = [
515
+ "Directory.Build.targets",
516
+ "NUGET_PACKAGES/microsoft.build.centralpackageversions/2.1.3/Sdk/Sdk.props", // this is an artifact of the package cache existing next to the csproj
517
+ "NUGET_PACKAGES/microsoft.build.centralpackageversions/2.1.3/Sdk/Sdk.targets", // this is an artifact of the package cache existing next to the csproj
518
+ "Packages.props",
519
+ ],
520
+ AdditionalFiles = [],
521
+ },
522
+ ],
523
+ }
524
+ );
525
+ }
268
526
 
269
- <ItemGroup Condition=" '$(TargetFramework)' == 'net7.0' ">
270
- <PackageReference Include="Microsoft.Extensions.DependencyModel" Version="1.1.1" />
271
- <PackageReference Include="Microsoft.AspNetCore.App" />
272
- <PackageReference Include="Microsoft.NET.Test.Sdk" Version="" />
273
- <PackageReference Include="Microsoft.Extensions.PlatformAbstractions" version="1.1.0"></PackageReference>
274
- <PackageReference Include="System.Collections.Specialized"><Version>4.3.0</Version></PackageReference>
275
- </ItemGroup>
527
+ [Fact]
528
+ public async Task ReturnsDependenciesThatCannotBeEvaluated_DirectDiscovery()
529
+ {
530
+ await TestDiscoveryAsync(
531
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = true },
532
+ packages:
533
+ [
534
+ MockNuGetPackage.CreateSimplePackage("Package.A", "1.2.3", "net8.0"),
535
+ MockNuGetPackage.CreateSimplePackage("Package.B", "4.5.6", "net8.0"),
536
+ ],
537
+ workspacePath: "",
538
+ files: [
539
+ ("myproj.csproj", """
540
+ <Project Sdk="Microsoft.NET.Sdk">
541
+ <PropertyGroup>
542
+ <TargetFramework>net8.0</TargetFramework>
543
+ </PropertyGroup>
544
+ <ItemGroup>
545
+ <PackageReference Include="Package.A" Version="1.2.3" />
546
+ <PackageReference Include="Package.B" Version="$(ThisPropertyCannotBeResolved)" />
547
+ </ItemGroup>
548
+ </Project>
549
+ """)
550
+ ],
551
+ expectedResult: new()
552
+ {
553
+ Path = "",
554
+ Projects = [
555
+ new()
556
+ {
557
+ FilePath = "myproj.csproj",
558
+ Dependencies = [
559
+ new("Package.A", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
560
+ new("Package.B", "4.5.6", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
561
+ ],
562
+ Properties = [
563
+ new("TargetFramework", "net8.0", "myproj.csproj"),
564
+ ],
565
+ TargetFrameworks = ["net8.0"],
566
+ ReferencedProjectPaths = [],
567
+ ImportedFiles = [],
568
+ AdditionalFiles = [],
569
+ }
570
+ ],
571
+ }
572
+ );
573
+ }
276
574
 
277
- <ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
278
- <Reference Include="System.Xml" />
279
- </ItemGroup>
280
- </Project>
281
- """),
282
- ("Packages.props", """
283
- <Project Sdk="Microsoft.NET.Sdk">
284
- <ItemGroup>
285
- <GlobalPackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0-beta2-19367-01" />
286
- <PackageReference Update="@(GlobalPackageReference)" PrivateAssets="Build" />
287
- <PackageReference Update="System.Lycos" Version="3.23.3" />
288
- <PackageReference Update="System.AskJeeves" Version="2.2.2" />
289
- <PackageReference Update="System.Google" Version="0.1.0-beta.3" />
290
- <PackageReference Update="System.WebCrawler" Version="1.1.1" />
291
- </ItemGroup>
292
- </Project>
293
- """),
294
- ("Directory.Build.targets", """
295
- <Project>
296
- <Sdk Name="Microsoft.Build.CentralPackageVersions" Version="2.1.3" />
297
- </Project>
298
- """),
575
+ [Fact]
576
+ public async Task ReturnsDependenciesThatCannotBeEvaluated_TemporaryProjectDiscovery()
577
+ {
578
+ await TestDiscoveryAsync(
579
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = false },
580
+ packages:
581
+ [
582
+ MockNuGetPackage.CreateSimplePackage("Package.A", "1.2.3", "net8.0"),
583
+ MockNuGetPackage.CreateSimplePackage("Package.B", "4.5.6", "net8.0"),
584
+ ],
585
+ workspacePath: "",
586
+ files: [
587
+ ("myproj.csproj", """
588
+ <Project Sdk="Microsoft.NET.Sdk">
589
+ <PropertyGroup>
590
+ <TargetFramework>net8.0</TargetFramework>
591
+ </PropertyGroup>
592
+ <ItemGroup>
593
+ <PackageReference Include="Package.A" Version="1.2.3" />
594
+ <PackageReference Include="Package.B" Version="$(ThisPropertyCannotBeResolved)" />
595
+ </ItemGroup>
596
+ </Project>
597
+ """)
598
+ ],
599
+ expectedResult: new()
600
+ {
601
+ Path = "",
602
+ Projects = [
603
+ new()
604
+ {
605
+ FilePath = "myproj.csproj",
606
+ ExpectedDependencyCount = 2,
607
+ Dependencies = [
608
+ new("Package.A", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
609
+ ],
610
+ Properties = [
611
+ new("TargetFramework", "net8.0", "myproj.csproj"),
612
+ ],
613
+ TargetFrameworks = ["net8.0"],
614
+ ReferencedProjectPaths = [],
615
+ ImportedFiles = [],
616
+ AdditionalFiles = [],
617
+ }
299
618
  ],
300
- expectedResult: new()
301
- {
302
- Path = "",
303
- ExpectedProjectCount = 5,
304
- Projects = [
305
- new()
306
- {
307
- FilePath = "myproj.csproj",
308
- ExpectedDependencyCount = 12,
309
- Dependencies = [
310
- new("Microsoft.Extensions.DependencyModel", "1.1.1", DependencyType.PackageReference, TargetFrameworks: ["net7.0", "net8.0"], IsDirect: true),
311
- new("Microsoft.AspNetCore.App", "", DependencyType.PackageReference, TargetFrameworks: ["net7.0", "net8.0"], IsDirect: true),
312
- new("Microsoft.NET.Test.Sdk", "", DependencyType.PackageReference, TargetFrameworks: ["net7.0", "net8.0"], IsDirect: true),
313
- new("Microsoft.NET.Sdk", null, DependencyType.MSBuildSdk),
314
- new("Microsoft.Extensions.PlatformAbstractions", "1.1.0", DependencyType.PackageReference, TargetFrameworks: ["net7.0", "net8.0"], IsDirect: true),
315
- new("System.Collections.Specialized", "4.3.0", DependencyType.PackageReference, TargetFrameworks: ["net7.0", "net8.0"], IsDirect: true),
316
- ],
317
- Properties = [
318
- new("Description", "Nancy is a lightweight web framework for the .Net platform, inspired by Sinatra. Nancy aim at delivering a low ceremony approach to building light, fast web applications.", "myproj.csproj"),
319
- new("TargetFrameworks", "net7.0;net8.0", "myproj.csproj"),
320
- ],
321
- TargetFrameworks = ["net7.0", "net8.0"],
322
- },
323
- new()
324
- {
325
- FilePath = "Packages.props",
326
- Dependencies = [
327
- new("Microsoft.SourceLink.GitHub", "1.0.0-beta2-19367-01", DependencyType.GlobalPackageReference, IsDirect: true),
328
- new("System.Lycos", "3.23.3", DependencyType.PackageReference, IsDirect: true, IsUpdate: true),
329
- new("System.AskJeeves", "2.2.2", DependencyType.PackageReference, IsDirect: true, IsUpdate: true),
330
- new("System.Google", "0.1.0-beta.3", DependencyType.PackageReference, IsDirect: true, IsUpdate: true),
331
- new("System.WebCrawler", "1.1.1", DependencyType.PackageReference, IsDirect: true, IsUpdate: true),
332
- new("Microsoft.NET.Sdk", null, DependencyType.MSBuildSdk),
333
- ],
334
- },
335
- ],
336
- }
337
- );
338
- }
339
- finally
340
- {
341
- // Restore the NuGet caches.
342
- Environment.SetEnvironmentVariable("NUGET_PACKAGES", nugetPackagesDirectory);
343
- Environment.SetEnvironmentVariable("NUGET_HTTP_CACHE_PATH", nugetHttpCacheDirectory);
344
- }
619
+ }
620
+ );
345
621
  }
346
622
 
347
623
  [Fact]
348
- public async Task ReturnsDependenciesThatCannotBeEvaluated()
624
+ public async Task TargetFrameworkCanBeResolvedFromImplicitlyImportedFile_DirectDiscovery()
349
625
  {
350
626
  await TestDiscoveryAsync(
351
- packages: [],
627
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = true },
628
+ packages:
629
+ [
630
+ MockNuGetPackage.CreateSimplePackage("Package.A", "1.2.3", "net8.0"),
631
+ ],
352
632
  workspacePath: "",
353
633
  files: [
354
634
  ("myproj.csproj", """
355
635
  <Project Sdk="Microsoft.NET.Sdk">
356
636
  <PropertyGroup>
357
- <TargetFramework>net8.0</TargetFramework>
637
+ <TargetFramework>$(SomeTfm)</TargetFramework>
358
638
  </PropertyGroup>
359
639
  <ItemGroup>
360
640
  <PackageReference Include="Package.A" Version="1.2.3" />
361
- <PackageReference Include="Package.B" Version="$(ThisPropertyCannotBeResolved)" />
362
641
  </ItemGroup>
363
642
  </Project>
643
+ """),
644
+ ("Directory.Build.props", """
645
+ <Project>
646
+ <PropertyGroup>
647
+ <SomeTfm>net8.0</SomeTfm>
648
+ </PropertyGroup>
649
+ </Project>
364
650
  """)
365
651
  ],
366
652
  expectedResult: new()
@@ -371,15 +657,17 @@ public partial class DiscoveryWorkerTests
371
657
  {
372
658
  FilePath = "myproj.csproj",
373
659
  Dependencies = [
374
- new("Microsoft.NET.Sdk", null, DependencyType.MSBuildSdk),
375
660
  new("Package.A", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
376
- new("Package.B", "$(ThisPropertyCannotBeResolved)", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
377
661
  ],
378
662
  Properties = [
379
663
  new("TargetFramework", "net8.0", "myproj.csproj"),
380
664
  ],
381
665
  TargetFrameworks = ["net8.0"],
382
666
  ReferencedProjectPaths = [],
667
+ ImportedFiles = [
668
+ "Directory.Build.props"
669
+ ],
670
+ AdditionalFiles = [],
383
671
  }
384
672
  ],
385
673
  }
@@ -387,10 +675,14 @@ public partial class DiscoveryWorkerTests
387
675
  }
388
676
 
389
677
  [Fact]
390
- public async Task TargetFrameworkCanBeResolvedFromImplicitlyImportedFile()
678
+ public async Task TargetFrameworkCanBeResolvedFromImplicitlyImportedFile_TemporaryProjectDiscovery()
391
679
  {
392
680
  await TestDiscoveryAsync(
393
- packages: [],
681
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = false },
682
+ packages:
683
+ [
684
+ MockNuGetPackage.CreateSimplePackage("Package.A", "1.2.3", "net8.0"),
685
+ ],
394
686
  workspacePath: "",
395
687
  files: [
396
688
  ("myproj.csproj", """
@@ -415,15 +707,9 @@ public partial class DiscoveryWorkerTests
415
707
  {
416
708
  Path = "",
417
709
  Projects = [
418
- new()
419
- {
420
- FilePath = "Directory.Build.props",
421
- Dependencies = [],
422
- },
423
710
  new()
424
711
  {
425
712
  FilePath = "myproj.csproj",
426
- ExpectedDependencyCount = 2,
427
713
  Dependencies = [
428
714
  new("Package.A", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
429
715
  ],
@@ -433,17 +719,24 @@ public partial class DiscoveryWorkerTests
433
719
  ],
434
720
  TargetFrameworks = ["net8.0"],
435
721
  ReferencedProjectPaths = [],
722
+ ImportedFiles = [
723
+ "Directory.Build.props"
724
+ ],
725
+ AdditionalFiles = [],
436
726
  }
437
- ]
727
+ ],
438
728
  }
439
729
  );
440
730
  }
441
731
 
442
- [Fact]
732
+ [Theory]
733
+ [InlineData(true)]
734
+ [InlineData(false)]
443
735
 
444
- public async Task NoDependenciesReturnedIfNoTargetFrameworkCanBeResolved()
736
+ public async Task NoDependenciesReturnedIfNoTargetFrameworkCanBeResolved(bool useDirectDiscovery)
445
737
  {
446
738
  await TestDiscoveryAsync(
739
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = useDirectDiscovery },
447
740
  packages: [],
448
741
  workspacePath: "",
449
742
  files: [
@@ -467,10 +760,14 @@ public partial class DiscoveryWorkerTests
467
760
  }
468
761
 
469
762
  [Fact]
470
- public async Task PropertyWithWildcardVersionIsRetained()
763
+ public async Task WildcardVersionNumberIsResolved()
471
764
  {
472
765
  await TestDiscoveryAsync(
473
- packages: [],
766
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = true },
767
+ packages:
768
+ [
769
+ MockNuGetPackage.CreateSimplePackage("Some.Package", "1.2.3", "net8.0"),
770
+ ],
474
771
  workspacePath: "",
475
772
  files: [
476
773
  ("myproj.csproj", """
@@ -491,15 +788,16 @@ public partial class DiscoveryWorkerTests
491
788
  new()
492
789
  {
493
790
  FilePath = "myproj.csproj",
494
- ExpectedDependencyCount = 2,
495
791
  Dependencies = [
496
- new("Some.Package", "1.*", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
792
+ new("Some.Package", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
497
793
  ],
498
794
  Properties = [
499
795
  new("TargetFramework", "net8.0", "myproj.csproj"),
500
796
  ],
501
797
  TargetFrameworks = ["net8.0"],
502
798
  ReferencedProjectPaths = [],
799
+ ImportedFiles = [],
800
+ AdditionalFiles = [],
503
801
  }
504
802
  ]
505
803
  }
@@ -507,9 +805,60 @@ public partial class DiscoveryWorkerTests
507
805
  }
508
806
 
509
807
  [Fact]
510
- public async Task DiscoverReportsTransitivePackageVersionsWithFourPartsForMultipleTargetFrameworks()
808
+ public async Task DiscoverReportsTransitivePackageVersionsWithFourPartsForMultipleTargetFrameworks_DirectDiscovery()
809
+ {
810
+ await TestDiscoveryAsync(
811
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = true },
812
+ packages:
813
+ [
814
+ new("Some.Package", "1.2.3.4", Files: [("lib/net7.0/Some.Package.dll", Array.Empty<byte>()), ("lib/net8.0/Some.Package.dll", Array.Empty<byte>())], DependencyGroups: [(null, [("Transitive.Dependency", "5.6.7.8")])]),
815
+ new("Transitive.Dependency", "5.6.7.8", Files: [("lib/net7.0/Transitive.Dependency.dll", Array.Empty<byte>()), ("lib/net8.0/Transitive.Dependency.dll", Array.Empty<byte>())]),
816
+ ],
817
+ workspacePath: "",
818
+ files:
819
+ [
820
+ ("myproj.csproj", """
821
+ <Project Sdk="Microsoft.NET.Sdk">
822
+ <PropertyGroup>
823
+ <TargetFrameworks>net7.0;net8.0</TargetFrameworks>
824
+ </PropertyGroup>
825
+ <ItemGroup>
826
+ <PackageReference Include="Some.Package" Version="1.2.3.4" />
827
+ </ItemGroup>
828
+ </Project>
829
+ """)
830
+ ],
831
+ expectedResult: new()
832
+ {
833
+ Path = "",
834
+ Projects = [
835
+ new()
836
+ {
837
+ FilePath = "myproj.csproj",
838
+ Dependencies = [
839
+ new("Some.Package", "1.2.3.4", DependencyType.PackageReference, TargetFrameworks: ["net7.0"], IsDirect: true),
840
+ new("Some.Package", "1.2.3.4", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
841
+ new("Transitive.Dependency", "5.6.7.8", DependencyType.Unknown, TargetFrameworks: ["net7.0"], IsTransitive: true),
842
+ new("Transitive.Dependency", "5.6.7.8", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
843
+ ],
844
+ Properties = [
845
+ new("TargetFrameworks", "net7.0;net8.0", "myproj.csproj"),
846
+ ],
847
+ TargetFrameworks = ["net7.0", "net8.0"],
848
+ ReferencedProjectPaths = [],
849
+ ImportedFiles = [],
850
+ AdditionalFiles = [],
851
+ }
852
+ ],
853
+ }
854
+ );
855
+ }
856
+
857
+ [Fact]
858
+ public async Task DiscoverReportsTransitivePackageVersionsWithFourPartsForMultipleTargetFrameworks_TemporaryProjectDiscovery()
511
859
  {
512
860
  await TestDiscoveryAsync(
861
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = false },
513
862
  packages:
514
863
  [
515
864
  new("Some.Package", "1.2.3.4", Files: [("lib/net7.0/Some.Package.dll", Array.Empty<byte>()), ("lib/net8.0/Some.Package.dll", Array.Empty<byte>())], DependencyGroups: [(null, [("Transitive.Dependency", "5.6.7.8")])]),
@@ -536,7 +885,6 @@ public partial class DiscoveryWorkerTests
536
885
  new()
537
886
  {
538
887
  FilePath = "myproj.csproj",
539
- ExpectedDependencyCount = 3,
540
888
  Dependencies = [
541
889
  new("Some.Package", "1.2.3.4", DependencyType.PackageReference, TargetFrameworks: ["net7.0", "net8.0"], IsDirect: true),
542
890
  new("Transitive.Dependency", "5.6.7.8", DependencyType.Unknown, TargetFrameworks: ["net7.0", "net8.0"], IsTransitive: true),
@@ -546,6 +894,8 @@ public partial class DiscoveryWorkerTests
546
894
  ],
547
895
  TargetFrameworks = ["net7.0", "net8.0"],
548
896
  ReferencedProjectPaths = [],
897
+ ImportedFiles = [],
898
+ AdditionalFiles = [],
549
899
  }
550
900
  ],
551
901
  }
@@ -553,10 +903,15 @@ public partial class DiscoveryWorkerTests
553
903
  }
554
904
 
555
905
  [Fact]
556
- public async Task DiscoverReportsPackagesThroughProjectReferenceElements()
906
+ public async Task DiscoverReportsPackagesThroughProjectReferenceElements_DirectDiscovery()
557
907
  {
558
908
  await TestDiscoveryAsync(
559
- packages: [],
909
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = true },
910
+ packages:
911
+ [
912
+ MockNuGetPackage.CreateSimplePackage("Package.A", "1.2.3", "net8.0"),
913
+ MockNuGetPackage.CreateSimplePackage("Package.B", "4.5.6", "net8.0"),
914
+ ],
560
915
  workspacePath: "test",
561
916
  files:
562
917
  [
@@ -591,22 +946,99 @@ public partial class DiscoveryWorkerTests
591
946
  new()
592
947
  {
593
948
  FilePath = "unit-tests.csproj",
594
- ExpectedDependencyCount = 2,
595
949
  Dependencies = [
596
- new("Package.A", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true)
950
+ new("Package.A", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
951
+ new("Package.B", "4.5.6", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true)
952
+ ],
953
+ ReferencedProjectPaths = [
954
+ "../src/helpers.csproj",
597
955
  ],
598
956
  Properties = [
599
957
  new("TargetFramework", "net8.0", @"test/unit-tests.csproj"),
600
958
  ],
601
959
  TargetFrameworks = ["net8.0"],
960
+ ImportedFiles = [],
961
+ AdditionalFiles = [],
962
+ },
963
+ new()
964
+ {
965
+ FilePath = "../src/helpers.csproj",
966
+ Dependencies = [
967
+ new("Package.B", "4.5.6", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true)
968
+ ],
969
+ Properties = [
970
+ new("TargetFramework", "net8.0", @"src/helpers.csproj"),
971
+ ],
972
+ TargetFrameworks = ["net8.0"],
973
+ ReferencedProjectPaths = [],
974
+ ImportedFiles = [],
975
+ AdditionalFiles = [],
976
+ }
977
+ ]
978
+ }
979
+ );
980
+ }
981
+
982
+ [Fact]
983
+ public async Task DiscoverReportsPackagesThroughProjectReferenceElements_TemporaryProjectDiscovery()
984
+ {
985
+ await TestDiscoveryAsync(
986
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = false },
987
+ packages:
988
+ [
989
+ MockNuGetPackage.CreateSimplePackage("Package.A", "1.2.3", "net8.0"),
990
+ MockNuGetPackage.CreateSimplePackage("Package.B", "4.5.6", "net8.0"),
991
+ ],
992
+ workspacePath: "test",
993
+ files:
994
+ [
995
+ ("test/unit-tests.csproj", """
996
+ <Project Sdk="Microsoft.NET.Sdk">
997
+ <PropertyGroup>
998
+ <TargetFramework>net8.0</TargetFramework>
999
+ </PropertyGroup>
1000
+ <ItemGroup>
1001
+ <ProjectReference Include="..\src\helpers.csproj" />
1002
+ </ItemGroup>
1003
+ <ItemGroup>
1004
+ <PackageReference Include="Package.A" Version="1.2.3" />
1005
+ </ItemGroup>
1006
+ </Project>
1007
+ """),
1008
+ ("src/helpers.csproj", """
1009
+ <Project Sdk="Microsoft.NET.Sdk">
1010
+ <PropertyGroup>
1011
+ <TargetFramework>net8.0</TargetFramework>
1012
+ </PropertyGroup>
1013
+ <ItemGroup>
1014
+ <PackageReference Include="Package.B" Version="4.5.6" />
1015
+ </ItemGroup>
1016
+ </Project>
1017
+ """)
1018
+ ],
1019
+ expectedResult: new()
1020
+ {
1021
+ Path = "test",
1022
+ Projects = [
1023
+ new()
1024
+ {
1025
+ FilePath = "unit-tests.csproj",
1026
+ Dependencies = [
1027
+ new("Package.A", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true)
1028
+ ],
602
1029
  ReferencedProjectPaths = [
603
- "../src/helpers.csproj"
1030
+ "../src/helpers.csproj",
604
1031
  ],
1032
+ Properties = [
1033
+ new("TargetFramework", "net8.0", @"test/unit-tests.csproj"),
1034
+ ],
1035
+ TargetFrameworks = ["net8.0"],
1036
+ ImportedFiles = [],
1037
+ AdditionalFiles = [],
605
1038
  },
606
1039
  new()
607
1040
  {
608
1041
  FilePath = "../src/helpers.csproj",
609
- ExpectedDependencyCount = 2,
610
1042
  Dependencies = [
611
1043
  new("Package.B", "4.5.6", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true)
612
1044
  ],
@@ -615,6 +1047,8 @@ public partial class DiscoveryWorkerTests
615
1047
  ],
616
1048
  TargetFrameworks = ["net8.0"],
617
1049
  ReferencedProjectPaths = [],
1050
+ ImportedFiles = [],
1051
+ AdditionalFiles = [],
618
1052
  }
619
1053
  ]
620
1054
  }
@@ -625,7 +1059,10 @@ public partial class DiscoveryWorkerTests
625
1059
  public async Task DiscoverReportsPackagesThroughSolutionFilesNotInTheSameDirectoryTreeAsTheProjects()
626
1060
  {
627
1061
  await TestDiscoveryAsync(
628
- packages: [],
1062
+ packages:
1063
+ [
1064
+ MockNuGetPackage.CreateSimplePackage("Some.Package", "1.2.3", "net8.0"),
1065
+ ],
629
1066
  workspacePath: "solutions",
630
1067
  files:
631
1068
  [
@@ -667,7 +1104,6 @@ public partial class DiscoveryWorkerTests
667
1104
  new()
668
1105
  {
669
1106
  FilePath = "../projects/library.csproj",
670
- ExpectedDependencyCount = 2,
671
1107
  Dependencies = [
672
1108
  new("Some.Package", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true)
673
1109
  ],
@@ -676,6 +1112,156 @@ public partial class DiscoveryWorkerTests
676
1112
  ],
677
1113
  TargetFrameworks = ["net8.0"],
678
1114
  ReferencedProjectPaths = [],
1115
+ ImportedFiles = [],
1116
+ AdditionalFiles = [],
1117
+ }
1118
+ ]
1119
+ }
1120
+ );
1121
+ }
1122
+
1123
+ [Fact]
1124
+ public async Task DiscoveryWithTargetPlaformVersion_DirectDiscovery()
1125
+ {
1126
+ await TestDiscoveryAsync(
1127
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = true },
1128
+ packages:
1129
+ [
1130
+ MockNuGetPackage.CreateSimplePackage("Some.Package", "1.2.3", "net8.0"),
1131
+ ],
1132
+ workspacePath: "src",
1133
+ files:
1134
+ [
1135
+ ("src/project.csproj", """
1136
+ <Project Sdk="Microsoft.NET.Sdk">
1137
+ <PropertyGroup>
1138
+ <TargetFrameworks>net8.0-ios;net8.0-android;net8.0-macos;net8.0-maccatalyst</TargetFrameworks>
1139
+ </PropertyGroup>
1140
+ <ItemGroup>
1141
+ <PackageReference Include="Some.Package" Version="1.2.3" />
1142
+ </ItemGroup>
1143
+ </Project>
1144
+ """),
1145
+ ],
1146
+ expectedResult: new()
1147
+ {
1148
+ Path = "src",
1149
+ Projects = [
1150
+ new()
1151
+ {
1152
+ FilePath = "project.csproj",
1153
+ Dependencies = [
1154
+ new("Some.Package", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net8.0-android"], IsDirect: true),
1155
+ new("Some.Package", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net8.0-ios"], IsDirect: true),
1156
+ new("Some.Package", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net8.0-maccatalyst"], IsDirect: true),
1157
+ new("Some.Package", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net8.0-macos"], IsDirect: true),
1158
+ ],
1159
+ Properties = [
1160
+ new("TargetFrameworks", "net8.0-ios;net8.0-android;net8.0-macos;net8.0-maccatalyst", @"src/project.csproj"),
1161
+ ],
1162
+ TargetFrameworks = ["net8.0-android", "net8.0-ios", "net8.0-maccatalyst", "net8.0-macos"],
1163
+ ReferencedProjectPaths = [],
1164
+ ImportedFiles = [],
1165
+ AdditionalFiles = [],
1166
+ }
1167
+ ]
1168
+ }
1169
+ );
1170
+ }
1171
+
1172
+ [Fact]
1173
+ public async Task DiscoveryWithTargetPlaformVersion_TemporaryProjectDiscovery()
1174
+ {
1175
+ await TestDiscoveryAsync(
1176
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = false },
1177
+ packages:
1178
+ [
1179
+ MockNuGetPackage.CreateSimplePackage("Some.Package", "1.2.3", "net8.0"),
1180
+ ],
1181
+ workspacePath: "src",
1182
+ files:
1183
+ [
1184
+ ("src/project.csproj", """
1185
+ <Project Sdk="Microsoft.NET.Sdk">
1186
+ <PropertyGroup>
1187
+ <TargetFrameworks>net8.0-ios;net8.0-android;net8.0-macos;net8.0-maccatalyst</TargetFrameworks>
1188
+ </PropertyGroup>
1189
+ <ItemGroup>
1190
+ <PackageReference Include="Some.Package" Version="1.2.3" />
1191
+ </ItemGroup>
1192
+ </Project>
1193
+ """),
1194
+ ],
1195
+ expectedResult: new()
1196
+ {
1197
+ Path = "src",
1198
+ Projects = [
1199
+ new()
1200
+ {
1201
+ FilePath = "project.csproj",
1202
+ Dependencies = [
1203
+ new("Some.Package", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net8.0-android", "net8.0-ios", "net8.0-maccatalyst", "net8.0-macos"], IsDirect: true)
1204
+ ],
1205
+ Properties = [
1206
+ new("TargetFrameworks", "net8.0-ios;net8.0-android;net8.0-macos;net8.0-maccatalyst", @"src/project.csproj"),
1207
+ ],
1208
+ TargetFrameworks = ["net8.0-android", "net8.0-ios", "net8.0-maccatalyst", "net8.0-macos"],
1209
+ ReferencedProjectPaths = [],
1210
+ ImportedFiles = [],
1211
+ AdditionalFiles = [],
1212
+ }
1213
+ ]
1214
+ }
1215
+ );
1216
+ }
1217
+
1218
+ [Theory]
1219
+ [InlineData(true)]
1220
+ [InlineData(false)]
1221
+ public async Task PackageLockJsonFileIsReported(bool useDirectDiscovery)
1222
+ {
1223
+ await TestDiscoveryAsync(
1224
+ experimentsManager: new ExperimentsManager() { UseDirectDiscovery = useDirectDiscovery },
1225
+ packages:
1226
+ [
1227
+ MockNuGetPackage.CreateSimplePackage("Some.Package", "1.2.3", "net8.0"),
1228
+ ],
1229
+ workspacePath: "src",
1230
+ files:
1231
+ [
1232
+ ("src/project.csproj", """
1233
+ <Project Sdk="Microsoft.NET.Sdk">
1234
+ <PropertyGroup>
1235
+ <TargetFramework>net8.0</TargetFramework>
1236
+ </PropertyGroup>
1237
+ <ItemGroup>
1238
+ <PackageReference Include="Some.Package" Version="1.2.3" />
1239
+ </ItemGroup>
1240
+ </Project>
1241
+ """),
1242
+ ("src/packages.lock.json", """
1243
+ {}
1244
+ """),
1245
+ ],
1246
+ expectedResult: new()
1247
+ {
1248
+ Path = "src",
1249
+ Projects = [
1250
+ new()
1251
+ {
1252
+ FilePath = "project.csproj",
1253
+ Dependencies = [
1254
+ new("Some.Package", "1.2.3", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true)
1255
+ ],
1256
+ Properties = [
1257
+ new("TargetFramework", "net8.0", "src/project.csproj"),
1258
+ ],
1259
+ TargetFrameworks = ["net8.0"],
1260
+ ReferencedProjectPaths = [],
1261
+ ImportedFiles = [],
1262
+ AdditionalFiles = [
1263
+ "packages.lock.json"
1264
+ ],
679
1265
  }
680
1266
  ]
681
1267
  }