Skip to content

Commit 9e4579a

Browse files
Improvement: The NuGet installer now respects IntentIgnore="true" on <PackageReference /> elements in .csproj files.
1 parent 4da98e0 commit 9e4579a

File tree

4 files changed

+75
-7
lines changed

4 files changed

+75
-7
lines changed

Modules/Intent.Modules.VisualStudio.Projects.Tests/NuGet/SchemeTests/SdkSchemeTests.cs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Intent.Modules.VisualStudio.Projects.Settings;
99
using Intent.Modules.VisualStudio.Projects.Tests.NuGet.Helpers;
1010
using NuGet.Versioning;
11+
using Shouldly;
1112
using VerifyTests;
1213
using VerifyXunit;
1314
using Xunit;
@@ -192,5 +193,56 @@ public void SortsPackageReferencesInAlphabeticalOrder(TestPackage existingPackag
192193
</Project>".ReplaceLineEndings(),
193194
actual: result.ReplaceLineEndings());
194195
}
196+
197+
[Fact]
198+
public void ItShouldRespectIgnore()
199+
{
200+
// Arrange
201+
var sut = TestFixtureHelper.CreateSdkProcessor();
202+
var tracing = new TestTracing();
203+
var project = TestFixtureHelper.CreateNuGetProject(
204+
scheme: VisualStudioProjectScheme.Sdk,
205+
processor: sut,
206+
testVersion: TestVersion.Low,
207+
testPackage: TestPackage.One,
208+
nugetPackagesToInstall: new Dictionary<string, string>
209+
{
210+
{ "TestPackage", "2.0.0" }
211+
});
212+
213+
// Act
214+
var result = sut.InstallPackages(
215+
solutionModelId: string.Empty,
216+
projectStereotypes: Enumerable.Empty<IStereotype>(),
217+
projectPath: null,
218+
projectContent:
219+
"""
220+
<Project Sdk="Microsoft.NET.Sdk">
221+
222+
<ItemGroup>
223+
<PackageReference Include="TestPackage" Version="1.0.0" IntentIgnore="true" />
224+
</ItemGroup>
225+
226+
</Project>
227+
""",
228+
requestedPackages: project.RequestedPackages,
229+
installedPackages: project.InstalledPackages,
230+
toRemovePackages: new List<string>(),
231+
projectName: project.Name,
232+
tracing: tracing,
233+
dependencyVersionOverwriteBehavior: DependencyVersionOverwriteBehaviorOption.IfNewer);
234+
235+
// Assert
236+
result.ReplaceLineEndings().ShouldBe(
237+
"""
238+
<Project Sdk="Microsoft.NET.Sdk">
239+
240+
<ItemGroup>
241+
<PackageReference Include="TestPackage" Version="1.0.0" IntentIgnore="true" />
242+
</ItemGroup>
243+
244+
</Project>
245+
""".ReplaceLineEndings());
246+
}
195247
}
196248
}

Modules/Intent.Modules.VisualStudio.Projects/FactoryExtensions/NuGet/SchemeProcessors/SdkSchemeProcessor.cs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -156,27 +156,39 @@ public string InstallPackages(
156156
}
157157

158158
var currentVersions = new List<VersionInfo>(2);
159-
var projectVersionMetadata = packageReferenceItem.Metadata.SingleOrDefault(x => string.Equals(x.Name, "Version", StringComparison.OrdinalIgnoreCase));
160-
if (projectVersionMetadata != null)
159+
var packageVersionMetadata = packageReferenceItem.Metadata.SingleOrDefault(x => string.Equals(x.Name, "Version", StringComparison.OrdinalIgnoreCase));
160+
if (packageVersionMetadata != null)
161161
{
162-
currentVersions.Add(new VersionInfo( projectVersionMetadata.Value));
162+
if (packageReferenceItem.Metadata.Any(x => string.Equals(x.Name, "IntentIgnore", StringComparison.OrdinalIgnoreCase) &&
163+
string.Equals(x.Value, "true", StringComparison.OrdinalIgnoreCase)))
164+
{
165+
continue;
166+
}
167+
168+
currentVersions.Add(new VersionInfo(packageVersionMetadata.Value));
163169
}
164170

165171
if (cpmTemplate.TryGetVersion(packageId, out var cpmVersion))
166172
{
173+
if (packageReferenceItem.Metadata.Any(x => string.Equals(x.Name, "IntentIgnore", StringComparison.OrdinalIgnoreCase) &&
174+
string.Equals(x.Value, "true", StringComparison.OrdinalIgnoreCase)))
175+
{
176+
continue;
177+
}
178+
167179
currentVersions.Add(new VersionInfo(cpmVersion));
168180
}
169181

170182
var currentVersion = currentVersions.Any()
171183
? currentVersions.Max()
172184
: null;
173185

174-
if (!isUsingCpm && projectVersionMetadata == null)
186+
if (!isUsingCpm && packageVersionMetadata == null)
175187
{
176188
var toVersion = currentVersion != null && currentVersion > requestedVersion
177189
? currentVersion
178190
: requestedVersion;
179-
projectVersionMetadata = packageReferenceItem.AddMetadata("Version", toVersion.Version, expressAsAttribute: true);
191+
packageVersionMetadata = packageReferenceItem.AddMetadata("Version", toVersion.Version, expressAsAttribute: true);
180192
}
181193

182194
switch (dependencyVersionOverwriteBehavior)
@@ -192,7 +204,7 @@ public string InstallPackages(
192204
else if (!isUsingCpm)
193205
{
194206
tracing.Info($"Updating {packageId} from \"{currentVersion?.Version}\" to \"{requestedVersion.Version}\" in project \"{projectName}\"");
195-
projectVersionMetadata.Value = requestedVersion.Version;
207+
packageVersionMetadata.Value = requestedVersion.Version;
196208
}
197209

198210
break;

Modules/Intent.Modules.VisualStudio.Projects/Intent.VisualStudio.Projects.imodspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<package>
33
<id>Intent.VisualStudio.Projects</id>
4-
<version>3.9.3</version>
4+
<version>3.9.4-pre.0</version>
55
<supportedClientVersions>[4.5.15-a, 5.0.0-a)</supportedClientVersions>
66
<summary>Visual Studio solution and project layout designer</summary>
77
<description>Visual Studio solution and project layout designer</description>

Modules/Intent.Modules.VisualStudio.Projects/release-notes.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
### Version 3.9.4
2+
3+
- Improvement: The NuGet installer now respects `IntentIgnore="true"` on `<PackageReference />` elements in `.csproj` files.
4+
15
### Version 3.9.3
26

37
- Improvement: Added `BaseUrl` stereotype to the relevent project, so that other applications creating proxies can read the URL value.

0 commit comments

Comments
 (0)