dependabot-nuget 0.244.0 → 0.246.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (23) hide show
  1. checksums.yaml +4 -4
  2. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/PackagesConfigUpdater.cs +42 -7
  3. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/SdkPackageUpdater.cs +164 -90
  4. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/UpdaterWorker.cs +38 -2
  5. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/MSBuildHelper.cs +68 -18
  6. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/NuGetHelper.cs +1 -1
  7. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTestBase.cs +115 -14
  8. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/{UpdateWorker.DirsProj.cs → UpdateWorkerTests.DirsProj.cs} +22 -24
  9. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.PackagesConfig.cs +66 -0
  10. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.Sdk.cs +385 -81
  11. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/MSBuildHelperTests.cs +7 -4
  12. data/lib/dependabot/nuget/file_parser/project_file_parser.rb +0 -4
  13. data/lib/dependabot/nuget/file_parser.rb +15 -1
  14. data/lib/dependabot/nuget/http_response_helpers.rb +14 -0
  15. data/lib/dependabot/nuget/metadata_finder.rb +6 -2
  16. data/lib/dependabot/nuget/native_helpers.rb +21 -12
  17. data/lib/dependabot/nuget/nuget_client.rb +8 -13
  18. data/lib/dependabot/nuget/update_checker/dependency_finder.rb +23 -13
  19. data/lib/dependabot/nuget/update_checker/nupkg_fetcher.rb +75 -11
  20. data/lib/dependabot/nuget/update_checker/repository_finder.rb +4 -10
  21. data/lib/dependabot/nuget/update_checker.rb +2 -3
  22. metadata +7 -7
  23. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/SdkPackageUpdaterTests.cs +0 -317
@@ -6,10 +6,61 @@ using System.Threading.Tasks;
6
6
 
7
7
  using Xunit;
8
8
 
9
+ using TestFile = (string Path, string Content);
10
+ using TestProject = (string Path, string Content, System.Guid ProjectId);
11
+
9
12
  namespace NuGetUpdater.Core.Test.Update;
10
13
 
11
14
  public abstract class UpdateWorkerTestBase
12
15
  {
16
+ protected static Task TestNoChange(
17
+ string dependencyName,
18
+ string oldVersion,
19
+ string newVersion,
20
+ bool useSolution,
21
+ string projectContents,
22
+ bool isTransitive = false,
23
+ (string Path, string Content)[]? additionalFiles = null,
24
+ string projectFilePath = "test-project.csproj")
25
+ {
26
+ return useSolution
27
+ ? TestNoChangeforSolution(dependencyName, oldVersion, newVersion, projectFiles: [(projectFilePath, projectContents)], isTransitive, additionalFiles)
28
+ : TestNoChangeforProject(dependencyName, oldVersion, newVersion, projectContents, isTransitive, additionalFiles, projectFilePath);
29
+ }
30
+
31
+ protected static Task TestUpdate(
32
+ string dependencyName,
33
+ string oldVersion,
34
+ string newVersion,
35
+ bool useSolution,
36
+ string projectContents,
37
+ string expectedProjectContents,
38
+ bool isTransitive = false,
39
+ TestFile[]? additionalFiles = null,
40
+ TestFile[]? additionalFilesExpected = null,
41
+ string projectFilePath = "test-project.csproj")
42
+ {
43
+ return useSolution
44
+ ? TestUpdateForSolution(dependencyName, oldVersion, newVersion, projectFiles: [(projectFilePath, projectContents)], projectFilesExpected: [(projectFilePath, expectedProjectContents)], isTransitive, additionalFiles, additionalFilesExpected)
45
+ : TestUpdateForProject(dependencyName, oldVersion, newVersion, projectFile: (projectFilePath, projectContents), expectedProjectContents, isTransitive, additionalFiles, additionalFilesExpected);
46
+ }
47
+
48
+ protected static Task TestUpdate(
49
+ string dependencyName,
50
+ string oldVersion,
51
+ string newVersion,
52
+ bool useSolution,
53
+ TestFile projectFile,
54
+ string expectedProjectContents,
55
+ bool isTransitive = false,
56
+ TestFile[]? additionalFiles = null,
57
+ TestFile[]? additionalFilesExpected = null)
58
+ {
59
+ return useSolution
60
+ ? TestUpdateForSolution(dependencyName, oldVersion, newVersion, projectFiles: [projectFile], projectFilesExpected: [(projectFile.Path, expectedProjectContents)], isTransitive, additionalFiles, additionalFilesExpected)
61
+ : TestUpdateForProject(dependencyName, oldVersion, newVersion, projectFile, expectedProjectContents, isTransitive, additionalFiles, additionalFilesExpected);
62
+ }
63
+
13
64
  protected static Task TestNoChangeforProject(
14
65
  string dependencyName,
15
66
  string oldVersion,
@@ -35,8 +86,8 @@ public abstract class UpdateWorkerTestBase
35
86
  string projectContents,
36
87
  string expectedProjectContents,
37
88
  bool isTransitive = false,
38
- (string Path, string Content)[]? additionalFiles = null,
39
- (string Path, string Content)[]? additionalFilesExpected = null,
89
+ TestFile[]? additionalFiles = null,
90
+ TestFile[]? additionalFilesExpected = null,
40
91
  string projectFilePath = "test-project.csproj")
41
92
  => TestUpdateForProject(
42
93
  dependencyName,
@@ -52,42 +103,92 @@ public abstract class UpdateWorkerTestBase
52
103
  string dependencyName,
53
104
  string oldVersion,
54
105
  string newVersion,
55
- (string Path, string Content) projectFile,
106
+ TestFile projectFile,
56
107
  string expectedProjectContents,
57
108
  bool isTransitive = false,
58
- (string Path, string Content)[]? additionalFiles = null,
59
- (string Path, string Content)[]? additionalFilesExpected = null)
109
+ TestFile[]? additionalFiles = null,
110
+ TestFile[]? additionalFilesExpected = null)
60
111
  {
61
112
  additionalFiles ??= [];
62
113
  additionalFilesExpected ??= [];
63
114
 
64
115
  var projectFilePath = projectFile.Path;
65
- var projectName = Path.GetFileNameWithoutExtension(projectFilePath);
116
+ var testFiles = new[] { projectFile }.Concat(additionalFiles).ToArray();
117
+
118
+ var actualResult = await RunUpdate(testFiles, async temporaryDirectory =>
119
+ {
120
+ var worker = new UpdaterWorker(new Logger(verbose: true));
121
+ await worker.RunAsync(temporaryDirectory, projectFilePath, dependencyName, oldVersion, newVersion, isTransitive);
122
+ });
123
+
124
+ var expectedResult = additionalFilesExpected.Prepend((projectFilePath, expectedProjectContents)).ToArray();
125
+
126
+ AssertContainsFiles(expectedResult, actualResult);
127
+ }
128
+
129
+ protected static Task TestNoChangeforSolution(
130
+ string dependencyName,
131
+ string oldVersion,
132
+ string newVersion,
133
+ TestFile[] projectFiles,
134
+ bool isTransitive = false,
135
+ TestFile[]? additionalFiles = null)
136
+ => TestUpdateForSolution(
137
+ dependencyName,
138
+ oldVersion,
139
+ newVersion,
140
+ projectFiles,
141
+ projectFilesExpected: projectFiles,
142
+ isTransitive,
143
+ additionalFiles,
144
+ additionalFilesExpected: additionalFiles);
145
+
146
+ protected static async Task TestUpdateForSolution(
147
+ string dependencyName,
148
+ string oldVersion,
149
+ string newVersion,
150
+ TestFile[] projectFiles,
151
+ TestFile[] projectFilesExpected,
152
+ bool isTransitive = false,
153
+ TestFile[]? additionalFiles = null,
154
+ TestFile[]? additionalFilesExpected = null)
155
+ {
156
+ additionalFiles ??= [];
157
+ additionalFilesExpected ??= [];
158
+
159
+ var testProjects = projectFiles.Select(file => new TestProject(file.Path, file.Content, Guid.NewGuid())).ToArray();
160
+ var projectDeclarations = testProjects.Select(project => $$"""
161
+ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "{{Path.GetFileNameWithoutExtension(project.Path)}}", "{{project.Path}}", "{{project.ProjectId}}"
162
+ EndProject
163
+ """);
164
+ var debugConfiguration = testProjects.Select(project => $$"""
165
+ {{project.ProjectId}}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
166
+ {{project.ProjectId}}.Debug|Any CPU.Build.0 = Debug|Any CPU
167
+ {{project.ProjectId}}..Release|Any CPU.ActiveCfg = Release|Any CPU
168
+ {{project.ProjectId}}..Release|Any CPU.Build.0 = Release|Any CPU
169
+ """);
170
+
66
171
  var slnName = "test-solution.sln";
67
172
  var slnContent = $$"""
68
173
  Microsoft Visual Studio Solution File, Format Version 12.00
69
174
  # Visual Studio 14
70
175
  VisualStudioVersion = 14.0.22705.0
71
176
  MinimumVisualStudioVersion = 10.0.40219.1
72
- Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "{{projectName}}", "{{projectFilePath}}", "{782E0C0A-10D3-444D-9640-263D03D2B20C}"
73
- EndProject
177
+ {{string.Join(Environment.NewLine, projectDeclarations)}}
74
178
  Global
75
179
  GlobalSection(SolutionConfigurationPlatforms) = preSolution
76
180
  Debug|Any CPU = Debug|Any CPU
77
181
  Release|Any CPU = Release|Any CPU
78
182
  EndGlobalSection
79
183
  GlobalSection(ProjectConfigurationPlatforms) = postSolution
80
- {782E0C0A-10D3-444D-9640-263D03D2B20C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
81
- {782E0C0A-10D3-444D-9640-263D03D2B20C}.Debug|Any CPU.Build.0 = Debug|Any CPU
82
- {782E0C0A-10D3-444D-9640-263D03D2B20C}.Release|Any CPU.ActiveCfg = Release|Any CPU
83
- {782E0C0A-10D3-444D-9640-263D03D2B20C}.Release|Any CPU.Build.0 = Release|Any CPU
184
+ {{string.Join(Environment.NewLine, debugConfiguration)}}
84
185
  EndGlobalSection
85
186
  GlobalSection(SolutionProperties) = preSolution
86
187
  HideSolutionNode = FALSE
87
188
  EndGlobalSection
88
189
  EndGlobal
89
190
  """;
90
- var testFiles = new[] { (slnName, slnContent), projectFile }.Concat(additionalFiles).ToArray();
191
+ var testFiles = new[] { (slnName, slnContent) }.Concat(projectFiles).Concat(additionalFiles).ToArray();
91
192
 
92
193
  var actualResult = await RunUpdate(testFiles, async temporaryDirectory =>
93
194
  {
@@ -96,7 +197,7 @@ public abstract class UpdateWorkerTestBase
96
197
  await worker.RunAsync(temporaryDirectory, slnPath, dependencyName, oldVersion, newVersion, isTransitive);
97
198
  });
98
199
 
99
- var expectedResult = additionalFilesExpected.Prepend((projectFilePath, expectedProjectContents)).ToArray();
200
+ var expectedResult = projectFilesExpected.Concat(additionalFilesExpected).ToArray();
100
201
 
101
202
  AssertContainsFiles(expectedResult, actualResult);
102
203
  }
@@ -1,5 +1,3 @@
1
- using System;
2
- using System.Collections.Generic;
3
1
  using System.IO;
4
2
  using System.Linq;
5
3
  using System.Threading.Tasks;
@@ -24,7 +22,7 @@ public partial class UpdateWorkerTests
24
22
  // initial
25
23
  projectContents: """
26
24
  <Project Sdk="Microsoft.Build.NoTargets">
27
-
25
+
28
26
  <ItemGroup>
29
27
  <ProjectReference Include="src/test-project.csproj" />
30
28
  </ItemGroup>
@@ -39,7 +37,7 @@ public partial class UpdateWorkerTests
39
37
  <PropertyGroup>
40
38
  <TargetFramework>netstandard2.0</TargetFramework>
41
39
  </PropertyGroup>
42
-
40
+
43
41
  <ItemGroup>
44
42
  <PackageReference Include="Newtonsoft.Json" Version="9.0.1" />
45
43
  </ItemGroup>
@@ -49,7 +47,7 @@ public partial class UpdateWorkerTests
49
47
  // expected
50
48
  expectedProjectContents: """
51
49
  <Project Sdk="Microsoft.Build.NoTargets">
52
-
50
+
53
51
  <ItemGroup>
54
52
  <ProjectReference Include="src/test-project.csproj" />
55
53
  </ItemGroup>
@@ -64,7 +62,7 @@ public partial class UpdateWorkerTests
64
62
  <PropertyGroup>
65
63
  <TargetFramework>netstandard2.0</TargetFramework>
66
64
  </PropertyGroup>
67
-
65
+
68
66
  <ItemGroup>
69
67
  <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
70
68
  </ItemGroup>
@@ -101,7 +99,7 @@ public partial class UpdateWorkerTests
101
99
  // initial
102
100
  projectContents: """
103
101
  <Project Sdk="Microsoft.Build.NoTargets">
104
-
102
+
105
103
  <ItemGroup>
106
104
  <ProjectReference Include="src/dirs.proj" />
107
105
  </ItemGroup>
@@ -113,7 +111,7 @@ public partial class UpdateWorkerTests
113
111
  ("src/dirs.proj",
114
112
  """
115
113
  <Project Sdk="Microsoft.Build.NoTargets">
116
-
114
+
117
115
  <ItemGroup>
118
116
  <ProjectReference Include="test-project/test-project.csproj" />
119
117
  </ItemGroup>
@@ -126,7 +124,7 @@ public partial class UpdateWorkerTests
126
124
  <PropertyGroup>
127
125
  <TargetFramework>netstandard2.0</TargetFramework>
128
126
  </PropertyGroup>
129
-
127
+
130
128
  <ItemGroup>
131
129
  <PackageReference Include="Newtonsoft.Json" Version="9.0.1" />
132
130
  </ItemGroup>
@@ -136,7 +134,7 @@ public partial class UpdateWorkerTests
136
134
  // expected
137
135
  expectedProjectContents: """
138
136
  <Project Sdk="Microsoft.Build.NoTargets">
139
-
137
+
140
138
  <ItemGroup>
141
139
  <ProjectReference Include="src/dirs.proj" />
142
140
  </ItemGroup>
@@ -148,7 +146,7 @@ public partial class UpdateWorkerTests
148
146
  ("src/dirs.proj",
149
147
  """
150
148
  <Project Sdk="Microsoft.Build.NoTargets">
151
-
149
+
152
150
  <ItemGroup>
153
151
  <ProjectReference Include="test-project/test-project.csproj" />
154
152
  </ItemGroup>
@@ -161,7 +159,7 @@ public partial class UpdateWorkerTests
161
159
  <PropertyGroup>
162
160
  <TargetFramework>netstandard2.0</TargetFramework>
163
161
  </PropertyGroup>
164
-
162
+
165
163
  <ItemGroup>
166
164
  <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
167
165
  </ItemGroup>
@@ -177,7 +175,7 @@ public partial class UpdateWorkerTests
177
175
  // initial
178
176
  projectContents: """
179
177
  <Project Sdk="Microsoft.Build.NoTargets">
180
-
178
+
181
179
  <ItemGroup>
182
180
  <ProjectReference Include="src/*.proj" />
183
181
  </ItemGroup>
@@ -189,7 +187,7 @@ public partial class UpdateWorkerTests
189
187
  ("src/dirs.proj",
190
188
  """
191
189
  <Project Sdk="Microsoft.Build.NoTargets">
192
-
190
+
193
191
  <ItemGroup>
194
192
  <ProjectReference Include="test-project/test-project.csproj" />
195
193
  </ItemGroup>
@@ -202,7 +200,7 @@ public partial class UpdateWorkerTests
202
200
  <PropertyGroup>
203
201
  <TargetFramework>netstandard2.0</TargetFramework>
204
202
  </PropertyGroup>
205
-
203
+
206
204
  <ItemGroup>
207
205
  <PackageReference Include="Newtonsoft.Json" Version="9.0.1" />
208
206
  </ItemGroup>
@@ -212,7 +210,7 @@ public partial class UpdateWorkerTests
212
210
  // expected
213
211
  expectedProjectContents: """
214
212
  <Project Sdk="Microsoft.Build.NoTargets">
215
-
213
+
216
214
  <ItemGroup>
217
215
  <ProjectReference Include="src/*.proj" />
218
216
  </ItemGroup>
@@ -224,7 +222,7 @@ public partial class UpdateWorkerTests
224
222
  ("src/dirs.proj",
225
223
  """
226
224
  <Project Sdk="Microsoft.Build.NoTargets">
227
-
225
+
228
226
  <ItemGroup>
229
227
  <ProjectReference Include="test-project/test-project.csproj" />
230
228
  </ItemGroup>
@@ -237,7 +235,7 @@ public partial class UpdateWorkerTests
237
235
  <PropertyGroup>
238
236
  <TargetFramework>netstandard2.0</TargetFramework>
239
237
  </PropertyGroup>
240
-
238
+
241
239
  <ItemGroup>
242
240
  <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
243
241
  </ItemGroup>
@@ -253,7 +251,7 @@ public partial class UpdateWorkerTests
253
251
  // initial
254
252
  projectContents: """
255
253
  <Project Sdk="Microsoft.Build.NoTargets">
256
-
254
+
257
255
  <ItemGroup>
258
256
  <ProjectReference Include="**/*.proj" />
259
257
  </ItemGroup>
@@ -265,7 +263,7 @@ public partial class UpdateWorkerTests
265
263
  ("src/dirs.proj",
266
264
  """
267
265
  <Project Sdk="Microsoft.Build.NoTargets">
268
-
266
+
269
267
  <ItemGroup>
270
268
  <ProjectReference Include="test-project/test-project.csproj" />
271
269
  </ItemGroup>
@@ -278,7 +276,7 @@ public partial class UpdateWorkerTests
278
276
  <PropertyGroup>
279
277
  <TargetFramework>netstandard2.0</TargetFramework>
280
278
  </PropertyGroup>
281
-
279
+
282
280
  <ItemGroup>
283
281
  <PackageReference Include="Newtonsoft.Json" Version="9.0.1" />
284
282
  </ItemGroup>
@@ -288,7 +286,7 @@ public partial class UpdateWorkerTests
288
286
  // expected
289
287
  expectedProjectContents: """
290
288
  <Project Sdk="Microsoft.Build.NoTargets">
291
-
289
+
292
290
  <ItemGroup>
293
291
  <ProjectReference Include="**/*.proj" />
294
292
  </ItemGroup>
@@ -300,7 +298,7 @@ public partial class UpdateWorkerTests
300
298
  ("src/dirs.proj",
301
299
  """
302
300
  <Project Sdk="Microsoft.Build.NoTargets">
303
-
301
+
304
302
  <ItemGroup>
305
303
  <ProjectReference Include="test-project/test-project.csproj" />
306
304
  </ItemGroup>
@@ -313,7 +311,7 @@ public partial class UpdateWorkerTests
313
311
  <PropertyGroup>
314
312
  <TargetFramework>netstandard2.0</TargetFramework>
315
313
  </PropertyGroup>
316
-
314
+
317
315
  <ItemGroup>
318
316
  <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
319
317
  </ItemGroup>
@@ -1072,6 +1072,72 @@ public partial class UpdateWorkerTests
1072
1072
  """);
1073
1073
  }
1074
1074
 
1075
+ [Fact]
1076
+ public async Task PackageCanBeUpdatedWhenAnotherInstalledPackageHasBeenDelisted()
1077
+ {
1078
+ // updating one package (Newtonsoft.Json) when another installed package (FSharp.Core/5.0.3-beta.21369.4) has been delisted
1079
+ await TestUpdateForProject("Newtonsoft.Json", "7.0.1", "13.0.1",
1080
+ // existing
1081
+ projectContents: """
1082
+ <Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
1083
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
1084
+ <PropertyGroup>
1085
+ <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
1086
+ </PropertyGroup>
1087
+ <ItemGroup>
1088
+ <None Include="packages.config" />
1089
+ </ItemGroup>
1090
+ <ItemGroup>
1091
+ <Reference Include="FSharp.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
1092
+ <HintPath>packages\FSharp.Core.5.0.3-beta.21369.4\lib\netstandard2.0\FSharp.Core.dll</HintPath>
1093
+ <Private>True</Private>
1094
+ </Reference>
1095
+ <Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed">
1096
+ <HintPath>packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
1097
+ <Private>True</Private>
1098
+ </Reference>
1099
+ </ItemGroup>
1100
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
1101
+ </Project>
1102
+ """,
1103
+ packagesConfigContents: """
1104
+ <packages>
1105
+ <package id="FSharp.Core" version="5.0.3-beta.21369.4" targetFramework="net462" />
1106
+ <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net462" />
1107
+ </packages>
1108
+ """,
1109
+ // expected
1110
+ expectedProjectContents: """
1111
+ <Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
1112
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
1113
+ <PropertyGroup>
1114
+ <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
1115
+ </PropertyGroup>
1116
+ <ItemGroup>
1117
+ <None Include="packages.config" />
1118
+ </ItemGroup>
1119
+ <ItemGroup>
1120
+ <Reference Include="FSharp.Core, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
1121
+ <HintPath>packages\FSharp.Core.5.0.3-beta.21369.4\lib\netstandard2.0\FSharp.Core.dll</HintPath>
1122
+ <Private>True</Private>
1123
+ </Reference>
1124
+ <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed">
1125
+ <HintPath>packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
1126
+ <Private>True</Private>
1127
+ </Reference>
1128
+ </ItemGroup>
1129
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
1130
+ </Project>
1131
+ """,
1132
+ expectedPackagesConfigContents: """
1133
+ <?xml version="1.0" encoding="utf-8"?>
1134
+ <packages>
1135
+ <package id="FSharp.Core" version="5.0.3-beta.21369.4" targetFramework="net462" />
1136
+ <package id="Newtonsoft.Json" version="13.0.1" targetFramework="net462" />
1137
+ </packages>
1138
+ """);
1139
+ }
1140
+
1075
1141
  protected static Task TestUpdateForProject(
1076
1142
  string dependencyName,
1077
1143
  string oldVersion,