Skip to content

Commit 73a1695

Browse files
authored
Merge pull request #41 from dotTrench/fix/ms-build-dependency
Fix msbuild dependencies
2 parents 9f33f6b + e0d2297 commit 73a1695

File tree

8 files changed

+125
-61
lines changed

8 files changed

+125
-61
lines changed

src/ProjectDiff.Core/GitTreeFileSystem.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Microsoft.Build.Construction;
55
using Microsoft.Build.Definition;
66
using Microsoft.Build.Evaluation;
7+
using Microsoft.Build.Evaluation.Context;
78
using Microsoft.Build.FileSystem;
89
using Microsoft.Extensions.Logging;
910

@@ -14,22 +15,21 @@ public sealed class GitTreeFileSystem : MSBuildFileSystemBase
1415
private readonly Repository _repository;
1516
private readonly Tree _tree;
1617
private readonly ProjectCollection _projectCollection;
17-
private readonly Dictionary<string, string> _globalProperties;
1818
private readonly ILogger<GitTreeFileSystem> _logger;
19+
private readonly EvaluationContext _evaluationContext;
1920

2021
public GitTreeFileSystem(
2122
Repository repository,
2223
Tree tree,
2324
ProjectCollection projectCollection,
24-
Dictionary<string, string> globalProperties,
2525
ILogger<GitTreeFileSystem> logger
2626
)
2727
{
2828
_repository = repository;
2929
_tree = tree;
3030
_projectCollection = projectCollection;
31-
_globalProperties = globalProperties;
3231
_logger = logger;
32+
_evaluationContext = EvaluationContext.Create(EvaluationContext.SharingPolicy.Shared, this);
3333
}
3434

3535
public bool EagerLoadProjects { get; set; }
@@ -189,7 +189,7 @@ public override bool FileExists(string path)
189189
if (_projectCollection.GetLoadedProjects(path).Count == 0)
190190
{
191191
_logger.LogDebug("Eagerly loading project from path '{Path}'", path);
192-
LoadProject(path, _globalProperties, _projectCollection);
192+
LoadProject(path, [], _projectCollection);
193193
}
194194
}
195195
}
@@ -258,7 +258,8 @@ ProjectCollection projects
258258
{
259259
GlobalProperties = globalProperties,
260260
ProjectCollection = projects,
261-
LoadSettings = ProjectLoadSettings.Default | ProjectLoadSettings.RecordDuplicateButNotCircularImports
261+
LoadSettings = ProjectLoadSettings.Default,
262+
EvaluationContext = _evaluationContext,
262263
}
263264
);
264265

src/ProjectDiff.Core/ProjectDiff.Core.csproj

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,27 @@
99
<PackageReadmeFile>README.md</PackageReadmeFile>
1010
</PropertyGroup>
1111

12+
1213
<ItemGroup>
14+
<PackageReference Include="Microsoft.Build" Version="17.11.4"/>
15+
<PackageReference Include="Microsoft.Build.Framework" Version="17.11.4"/>
16+
<PackageReference Include="Microsoft.Build.Utilities.Core" Version="17.11.4"/>
17+
1318
<PackageReference Include="LibGit2Sharp" Version="0.31.0"/>
14-
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.7" />
19+
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.7"/>
1520
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0">
16-
<PrivateAssets>all</PrivateAssets>
17-
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
21+
<PrivateAssets>all</PrivateAssets>
22+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1823
</PackageReference>
19-
<PackageReference Include="Microsoft.VisualStudio.SolutionPersistence" Version="1.0.52" />
20-
<PackageReference Include="Microsoft.Build.Prediction" Version="1.2.31" />
24+
<PackageReference Include="Microsoft.VisualStudio.SolutionPersistence" Version="1.0.52"/>
25+
<PackageReference Include="Microsoft.Build.Prediction" Version="1.2.31"/>
2126
<PackageReference Include="MinVer" Version="6.0.0">
22-
<PrivateAssets>all</PrivateAssets>
23-
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
27+
<PrivateAssets>all</PrivateAssets>
28+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2429
</PackageReference>
2530
</ItemGroup>
2631

2732
<ItemGroup>
28-
<None Include="README.md" Pack="true" PackagePath="\" />
33+
<None Include="README.md" Pack="true" PackagePath="\"/>
2934
</ItemGroup>
3035
</Project>

src/ProjectDiff.Core/ProjectGraphFactory.cs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ public async Task<ProjectGraph> BuildForGitTree(
3535
repository,
3636
tree,
3737
projectCollection,
38-
[],
3938
_loggerFactory.CreateLogger<GitTreeFileSystem>()
4039
)
4140
{
@@ -52,13 +51,7 @@ public async Task<ProjectGraph> BuildForGitTree(
5251
(path, globalProperties, collection) =>
5352
{
5453
var proj = fs.LoadProject(path, globalProperties, collection);
55-
56-
proj.MarkDirty();
57-
58-
return proj.CreateProjectInstance(
59-
ProjectInstanceSettings.None,
60-
EvaluationContext.Create(EvaluationContext.SharingPolicy.Shared, fs)
61-
);
54+
return proj.CreateProjectInstance(ProjectInstanceSettings.Immutable);
6255
},
6356
cancellationToken
6457
);

src/dotnet-proj-diff/OutputFormatters/TraversalOutputFormatter.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ public async Task WriteAsync(
2121
CancellationToken cancellationToken = default
2222
)
2323
{
24-
var element = ProjectRootElement.Create(NewProjectFileOptions.None);
24+
using var projectCollection = new ProjectCollection();
25+
var element = ProjectRootElement.Create(projectCollection, NewProjectFileOptions.None);
2526
element.Sdk = _microsoftBuildTraversalVersion != null
2627
? $"Microsoft.Build.Traversal/{_microsoftBuildTraversalVersion}"
2728
: "Microsoft.Build.Traversal";

src/dotnet-proj-diff/dotnet-proj-diff.csproj

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,30 @@
1313
</PropertyGroup>
1414

1515
<ItemGroup>
16-
<PackageReference Include="Microsoft.Build.Locator" Version="1.9.1" />
17-
<PackageReference Include="Microsoft.Extensions.FileSystemGlobbing" Version="9.0.7" />
18-
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="9.0.7" />
16+
<PackageReference Include="Microsoft.Build" Version="17.11.4" ExcludeAssets="runtime"/>
17+
<PackageReference Include="Microsoft.Build.Framework" Version="17.11.4" ExcludeAssets="runtime"/>
18+
<PackageReference Include="Microsoft.Build.Utilities.Core" Version="17.11.4" ExcludeAssets="runtime"/>
19+
20+
<PackageReference Include="Microsoft.Build.Locator" Version="1.9.1"/>
21+
<PackageReference Include="Microsoft.Extensions.FileSystemGlobbing" Version="9.0.7"/>
22+
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="9.0.7"/>
1923
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0">
20-
<PrivateAssets>all</PrivateAssets>
21-
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
24+
<PrivateAssets>all</PrivateAssets>
25+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2226
</PackageReference>
2327
<PackageReference Include="MinVer" Version="6.0.0">
24-
<PrivateAssets>all</PrivateAssets>
25-
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
28+
<PrivateAssets>all</PrivateAssets>
29+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2630
</PackageReference>
27-
<PackageReference Include="System.CommandLine" Version="2.0.0-beta6.25358.103" />
31+
<PackageReference Include="System.CommandLine" Version="2.0.0-beta6.25358.103"/>
2832
</ItemGroup>
2933

3034
<ItemGroup>
31-
<ProjectReference Include="..\ProjectDiff.Core\ProjectDiff.Core.csproj" />
35+
<ProjectReference Include="..\ProjectDiff.Core\ProjectDiff.Core.csproj"/>
3236
</ItemGroup>
33-
37+
3438
<ItemGroup>
35-
<None Include="..\..\README.md" Pack="true" PackagePath="\" />
39+
<None Include="..\..\README.md" Pack="true" PackagePath="\"/>
3640
</ItemGroup>
3741

3842
</Project>

test/ProjectDiff.Tests/Core/DirectoryBuildPropsTests.cs

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,80 @@ await repo.WriteAllTextAsync(
207207
Assert.Equal(DiffStatus.Modified, project.Status);
208208
}
209209

210+
[Fact]
211+
public async Task RemovingDirectoryBuildProps_ShouldAffectProjects()
212+
{
213+
using var repo = await TestRepository.SetupAsync(async r =>
214+
{
215+
await r.WriteAllTextAsync(
216+
"Directory.Build.props",
217+
"""
218+
<Project>
219+
<PropertyGroup>
220+
<MyCustomProperty>Value</MyCustomProperty>
221+
</PropertyGroup>
222+
</Project>
223+
"""
224+
);
225+
226+
r.CreateDirectory("Sample");
227+
r.CreateProject("Sample/Sample.csproj");
228+
}
229+
);
230+
231+
repo.DeleteFile("Directory.Build.props");
232+
233+
var result = await GetProjectDiff(repo);
234+
235+
Assert.Equal(ProjectDiffExecutionStatus.Success, result.Status);
236+
237+
var project = Assert.Single(result.Projects);
238+
239+
Assert.Equal(DiffStatus.Modified, project.Status);
240+
}
241+
242+
[Fact]
243+
public async Task RemovingNestedDirecotryBuildProps_ShouldAffectProjects()
244+
{
245+
using var repo = await TestRepository.SetupAsync(async r =>
246+
{
247+
await r.WriteAllTextAsync(
248+
"Directory.Build.props",
249+
"""
250+
<Project>
251+
<PropertyGroup>
252+
<MyCustomProperty>Value</MyCustomProperty>
253+
</PropertyGroup>
254+
</Project>
255+
"""
256+
);
257+
258+
r.CreateDirectory("Sample");
259+
await r.WriteAllTextAsync(
260+
"Sample/Directory.Build.props",
261+
"""
262+
<Project>
263+
<PropertyGroup>
264+
<SomeOtherProperty>Value</SomeOtherProperty>
265+
</PropertyGroup>
266+
</Project>
267+
"""
268+
);
269+
r.CreateProject("Sample/Sample.csproj");
270+
}
271+
);
272+
273+
repo.DeleteFile("Sample/Directory.Build.props");
274+
275+
var result = await GetProjectDiff(repo);
276+
277+
Assert.Equal(ProjectDiffExecutionStatus.Success, result.Status);
278+
279+
var project = Assert.Single(result.Projects);
280+
281+
Assert.Equal(DiffStatus.Modified, project.Status);
282+
}
283+
210284

211285
private static Task<ProjectDiffResult> GetProjectDiff(TestRepository repo)
212286
{

test/ProjectDiff.Tests/Core/GitTreeFileSystemTests.cs

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ await repo.WriteAllTextAsync("test.txt", "Hello, World!")
2020
repo,
2121
repo.HeadTree,
2222
projects,
23-
[],
2423
NullLogger<GitTreeFileSystem>.Instance
2524
);
2625

@@ -42,7 +41,6 @@ await repo.WriteAllTextAsync("test.txt", "Hello, World!")
4241
repo,
4342
repo.HeadTree,
4443
projects,
45-
[],
4644
NullLogger<GitTreeFileSystem>.Instance
4745
);
4846

@@ -65,7 +63,6 @@ await repo.WriteAllTextAsync("test.txt", "Hello, World!")
6563
repo,
6664
repo.HeadTree,
6765
projects,
68-
[],
6966
NullLogger<GitTreeFileSystem>.Instance
7067
);
7168

@@ -89,7 +86,6 @@ public async Task DirectoryExists_ReturnsTrueForExistingDirectory()
8986
repo,
9087
repo.HeadTree,
9188
projects,
92-
[],
9389
NullLogger<GitTreeFileSystem>.Instance
9490
);
9591

@@ -108,7 +104,6 @@ public async Task DirectoryExists_ReturnsFalseForNonExistingDirectory()
108104
repo,
109105
repo.HeadTree,
110106
projects,
111-
[],
112107
NullLogger<GitTreeFileSystem>.Instance
113108
);
114109

@@ -129,7 +124,6 @@ await repo.WriteAllTextAsync("test.txt", "Hello, World!")
129124
repo,
130125
repo.HeadTree,
131126
projects,
132-
[],
133127
NullLogger<GitTreeFileSystem>.Instance
134128
);
135129

@@ -148,7 +142,6 @@ public async Task FileExists_ReturnsFalseForNonExistingFile()
148142
repo,
149143
repo.HeadTree,
150144
projects,
151-
[],
152145
NullLogger<GitTreeFileSystem>.Instance
153146
);
154147

@@ -169,7 +162,6 @@ await repo.WriteAllTextAsync("test.txt", "Hello, World!")
169162
repo,
170163
repo.HeadTree,
171164
projects,
172-
[],
173165
NullLogger<GitTreeFileSystem>.Instance
174166
);
175167

@@ -193,7 +185,6 @@ public async Task FileOrDirectoryExists_ReturnsTrueForExistingDirectory()
193185
repo,
194186
repo.HeadTree,
195187
projects,
196-
[],
197188
NullLogger<GitTreeFileSystem>.Instance
198189
);
199190

@@ -212,7 +203,6 @@ public async Task FileOrDirectoryExists_ReturnsFalseForNonExistingPath()
212203
repo,
213204
repo.HeadTree,
214205
projects,
215-
[],
216206
NullLogger<GitTreeFileSystem>.Instance
217207
);
218208

@@ -238,7 +228,6 @@ public async Task EnumerateDirectories_ReturnsDirectories()
238228
repo,
239229
repo.HeadTree,
240230
projects,
241-
[],
242231
NullLogger<GitTreeFileSystem>.Instance
243232
);
244233

@@ -274,7 +263,6 @@ public async Task EnumerateDirectories_InSubdirectoryReturnsSubdirectories()
274263
repo,
275264
repo.HeadTree,
276265
projects,
277-
[],
278266
NullLogger<GitTreeFileSystem>.Instance
279267
);
280268

@@ -313,7 +301,6 @@ public async Task EnumerateDirectories_WithSearchOptionAllDirectoriesReturnsAllD
313301
repo,
314302
repo.HeadTree,
315303
projects,
316-
[],
317304
NullLogger<GitTreeFileSystem>.Instance
318305
);
319306

@@ -344,7 +331,6 @@ public void EnumerateFilesInEmptyDirectoryReturnsEmpty()
344331
repo,
345332
repo.HeadTree,
346333
projects,
347-
[],
348334
NullLogger<GitTreeFileSystem>.Instance
349335
);
350336

@@ -371,7 +357,6 @@ public async Task EnumerateFiles_InDirectoryWithFileReturnsFile()
371357
repo,
372358
repo.HeadTree,
373359
projects,
374-
[],
375360
NullLogger<GitTreeFileSystem>.Instance
376361
);
377362

@@ -411,7 +396,6 @@ public async Task EnumerateFiles_InDirectoryWithSubdirectoryReturnsFiles()
411396
repo,
412397
repo.HeadTree,
413398
projects,
414-
[],
415399
NullLogger<GitTreeFileSystem>.Instance
416400
);
417401

@@ -447,7 +431,6 @@ public async Task EnumerateFiles_WithSearchOptionAllDirectoriesReturnsAllFiles()
447431
repo,
448432
repo.HeadTree,
449433
projects,
450-
[],
451434
NullLogger<GitTreeFileSystem>.Instance
452435
);
453436

@@ -486,7 +469,6 @@ public async Task EnumerateFiles_InSubdirectoryWithSearchOptionAllDirectoriesRet
486469
repo,
487470
repo.HeadTree,
488471
projects,
489-
[],
490472
NullLogger<GitTreeFileSystem>.Instance
491473
);
492474

0 commit comments

Comments
 (0)