From bc305347656158778cc7b08f03ac81ab1ca9f2d4 Mon Sep 17 00:00:00 2001 From: Jonathan Pobst <jonathan.pobst@microsoft.com> Date: Tue, 25 Jul 2023 14:27:57 -0500 Subject: [PATCH] Add support for exact version NuGet dependencies based on Maven dependency info from POM. --- Directory.Build.targets | 18 ++++++++++++++++++ source/AndroidXProject.cshtml | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 Directory.Build.targets diff --git a/Directory.Build.targets b/Directory.Build.targets new file mode 100644 index 000000000..6e47fc572 --- /dev/null +++ b/Directory.Build.targets @@ -0,0 +1,18 @@ +<Project> + <!-- Enables "ExactVersion" attribute on "ProjectReference" to allow an exact NuGet reference version to be used. + https://github.com/NuGet/Home/issues/5556#issuecomment-1179526189 --> + <Target Name="UseExplicitPackageVersions" BeforeTargets="GenerateNuspec"> + <ItemGroup> + <_ProjectReferenceWithExplicitPackageVersion Include="@(ProjectReference->'%(FullPath)')" Condition="'%(ProjectReference.PackageVersion)' != ''" /> + <_ProjectReferenceWithExactPackageVersion Include="@(ProjectReference->'%(FullPath)')" Condition="'%(ProjectReference.ExactVersion)' == 'true'" /> + <_ProjectReferenceWithReassignedVersion Include="@(_ProjectReferencesWithVersions)" Condition="'%(Identity)' != '' And '@(_ProjectReferenceWithExplicitPackageVersion)' == '@(_ProjectReferencesWithVersions)'"> + <ProjectVersion>@(_ProjectReferenceWithExplicitPackageVersion->'%(PackageVersion)')</ProjectVersion> + </_ProjectReferenceWithReassignedVersion> + <_ProjectReferenceWithReassignedVersion Include="@(_ProjectReferencesWithVersions)" Condition="'%(Identity)' != '' And '@(_ProjectReferenceWithExactPackageVersion)' == '@(_ProjectReferencesWithVersions)'"> + <ProjectVersion>[@(_ProjectReferencesWithVersions->'%(ProjectVersion)')]</ProjectVersion> + </_ProjectReferenceWithReassignedVersion> + <_ProjectReferencesWithVersions Remove="@(_ProjectReferenceWithReassignedVersion)" /> + <_ProjectReferencesWithVersions Include="@(_ProjectReferenceWithReassignedVersion)" /> + </ItemGroup> + </Target> +</Project> diff --git a/source/AndroidXProject.cshtml b/source/AndroidXProject.cshtml index 1305f8892..6eb6f7a8a 100644 --- a/source/AndroidXProject.cshtml +++ b/source/AndroidXProject.cshtml @@ -172,7 +172,8 @@ <!-- ProjectReference --> @foreach (var dep in @Model.NuGetDependencies) { if (dep.IsProjectReference) { - <ProjectReference Include="..\..\generated\@(dep.MavenArtifact.MavenGroupId).@(dep.MavenArtifact.MavenArtifactId)\@(dep.MavenArtifact.MavenGroupId).@(dep.MavenArtifact.MavenArtifactId).csproj" PrivateAssets="none" /> + var exact_version = dep.MavenArtifact.MavenArtifactVersion.StartsWith('[').ToString(); + <ProjectReference Include="..\..\generated\@(dep.MavenArtifact.MavenGroupId).@(dep.MavenArtifact.MavenArtifactId)\@(dep.MavenArtifact.MavenGroupId).@(dep.MavenArtifact.MavenArtifactId).csproj" PrivateAssets="none" ExactVersion="@(exact_version)" /> } }