Skip to content

Commit

Permalink
Fix: Also find assembly version info for VB projects (#870)
Browse files Browse the repository at this point in the history
The AssemblyInfo file for VB has a different file path and syntax than
C#, so assembly version information for VB projects was not getting
picked up by the ProjectFileService.

Signed-off-by: dhivarson <[email protected]>
  • Loading branch information
dhivarson authored Jun 7, 2024
1 parent bb9b240 commit 8d75418
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 4 deletions.
44 changes: 44 additions & 0 deletions CycloneDX.Tests/ProjectFileServiceTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -326,5 +326,49 @@ public async Task RecursivelyGetProjectReferences_ReturnsProjectReferences()
item => Assert.Equal(XFS.Path(@"c:\SolutionPath\Project2\Project2.csproj"), item),
item => Assert.Equal(XFS.Path(@"c:\SolutionPath\Project3\Project3.csproj"), item));
}

[Fact]
public async Task RecursivelyGetProjectReferences_ReturnsCSAssemblyVersion()
{
var mockFileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
{
{ XFS.Path(@"c:\SolutionPath\Project1\Project1.csproj"), new MockFileData(@"<Project></Project>") },
{ XFS.Path(@"c:\SolutionPath\Project1\Properties\AssemblyInfo.cs"), new MockFileData(@"[assembly: AssemblyVersion(""3.2.1.0"")]")}
});
var mockDotnetUtilsService = new Mock<IDotnetUtilsService>();
var mockPackageFileService = new Mock<IPackagesFileService>();
var mockProjectAssetsFileService = new Mock<IProjectAssetsFileService>();
var projectFileService = new ProjectFileService(
mockFileSystem,
mockDotnetUtilsService.Object,
mockPackageFileService.Object,
mockProjectAssetsFileService.Object);

var projects = await projectFileService.RecursivelyGetProjectReferencesAsync(XFS.Path(@"c:\SolutionPath\Project1\Project1.csproj")).ConfigureAwait(true);

Assert.Equal("3.2.1.0", projects.FirstOrDefault().Version);
}

[Fact]
public async Task RecursivelyGetProjectReferences_ReturnsVBAssemblyVersion()
{
var mockFileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
{
{ XFS.Path(@"c:\SolutionPath\Project1\Project1.vbproj"), new MockFileData(@"<Project></Project>") },
{ XFS.Path(@"c:\SolutionPath\Project1\My Project\AssemblyInfo.vb"), new MockFileData(@"<Assembly: AssemblyVersion(""3.2.1.0"")>")}
});
var mockDotnetUtilsService = new Mock<IDotnetUtilsService>();
var mockPackageFileService = new Mock<IPackagesFileService>();
var mockProjectAssetsFileService = new Mock<IProjectAssetsFileService>();
var projectFileService = new ProjectFileService(
mockFileSystem,
mockDotnetUtilsService.Object,
mockPackageFileService.Object,
mockProjectAssetsFileService.Object);

var projects = await projectFileService.RecursivelyGetProjectReferencesAsync(XFS.Path(@"c:\SolutionPath\Project1\Project1.vbproj")).ConfigureAwait(true);

Assert.Equal("3.2.1.0", projects.FirstOrDefault().Version);
}
}
}
17 changes: 13 additions & 4 deletions CycloneDX/Services/ProjectFileService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -115,13 +115,22 @@ public bool IsTestProject(string projectFilePath)

if (version == null)
{
string assemblyInfoPath = Path.Combine(Path.GetDirectoryName(projectFilePath), "Properties", "AssemblyInfo.cs");
if (_fileSystem.File.Exists(assemblyInfoPath))
string assemblyInfoPath;
string pattern;
if (Path.GetExtension(projectFilePath).Equals(".vbproj", StringComparison.Ordinal))
{
assemblyInfoPath = Path.Combine(Path.GetDirectoryName(projectFilePath), "My Project", "AssemblyInfo.vb");
pattern = @"^\<Assembly: AssemblyVersion\(""(?<Version>.*?)""\)\>$";
}
else
{
assemblyInfoPath = Path.Combine(Path.GetDirectoryName(projectFilePath), "Properties", "AssemblyInfo.cs");
pattern = @"^\[assembly: AssemblyVersion\(""(?<Version>.*?)""\)\]$";
}

if (_fileSystem.File.Exists(assemblyInfoPath))
{
string[] lines = _fileSystem.File.ReadAllLines(assemblyInfoPath);
string pattern = @"^\[assembly: AssemblyVersion\(""(?<Version>.*?)""\)\]$";

foreach (var line in lines)
{
Match match = Regex.Match(line, pattern);
Expand Down

0 comments on commit 8d75418

Please sign in to comment.