Skip to content

Commit 89e242d

Browse files
committed
Add a option to opt into central package management
- New Option 'useCentralPackageManagement' - Deactive package management by default
1 parent e0fe662 commit 89e242d

4 files changed

Lines changed: 65 additions & 3 deletions

File tree

CodeGenerator/Generators/CsprojGen.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ private string GetFileContents()
2323
{
2424
var optionalNullableProperty = dbDriver.Options.DotnetFramework.IsDotnetCore() ? Environment.NewLine + " <Nullable>enable</Nullable>" : "";
2525
var referenceItems = dbDriver.GetPackageReferences()
26-
.Select(p => $""" <PackageReference Include="{p.Key}" Version="{p.Value}"/>""")
26+
.Select(p => dbDriver.Options.UseCentralPackageManagement
27+
? $""" <PackageReference Include="{p.Key}" />"""
28+
: $""" <PackageReference Include="{p.Key}" Version="{p.Value}"/>""")
2729
.JoinByNewLine();
2830

2931
return $"""
@@ -37,8 +39,7 @@ dotnet sln add {outputDirectory}/{projectName}.csproj
3739
<TargetFramework>{dbDriver.Options.DotnetFramework.ToName()}</TargetFramework>
3840
<RootNamespace>{namespaceName}</RootNamespace>
3941
<OutputType>Library</OutputType>{optionalNullableProperty}
40-
<!-- Opt out of centralized package management -->
41-
<ManagePackageVersionsCentrally>false</ManagePackageVersionsCentrally>
42+
<ManagePackageVersionsCentrally>{dbDriver.Options.UseCentralPackageManagement}</ManagePackageVersionsCentrally>
4243
</PropertyGroup>
4344
4445
<ItemGroup>

PluginOptions/Options.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ public Options(GenerateRequest generateRequest)
2525
if (rawOptions.DebugRequest && generateRequest.Settings.Codegen.Wasm is not null)
2626
throw new ArgumentException("Debug request mode cannot be used with WASM plugin");
2727
DebugRequest = rawOptions.DebugRequest;
28+
29+
UseCentralPackageManagement = rawOptions.UseCentralPackageManagement;
2830
}
2931

3032
public DriverName DriverName { get; }
@@ -45,6 +47,12 @@ public Options(GenerateRequest generateRequest)
4547

4648
public bool DebugRequest { get; }
4749

50+
/// <summary>
51+
/// When true generated code will opt in to central package management.
52+
/// https://learn.microsoft.com/en-us/nuget/consume-packages/central-package-management
53+
/// </summary>
54+
public bool UseCentralPackageManagement { get; }
55+
4856
private static readonly Dictionary<string, DriverName> EngineToDriverMapping = new()
4957
{
5058
{ "mysql", DriverName.MySqlConnector },

PluginOptions/RawOptions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ public record RawOptions
2828

2929
[JsonPropertyName("debugRequest")]
3030
public bool DebugRequest { get; init; }
31+
32+
[JsonPropertyName("useCentralPackageManagement")]
33+
public bool UseCentralPackageManagement { get; init; }
3134
}
3235

3336
public class OverrideOption

unit-tests/CodegenTests/CodegenCsprojTests.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,54 @@ public void TestOverrideDapperVersion()
105105

106106
Assert.That(actual, Is.EqualTo(expected));
107107
}
108+
109+
[Test]
110+
public async Task TestGenerationWithoutCentralPackageManagement()
111+
{
112+
GenerateRequest request = new ()
113+
{
114+
Settings = _mysqlSettings,
115+
Catalog = _emptyCatalog,
116+
PluginOptions =
117+
ByteString.CopyFrom("{\"useCentralPackageManagement\": false}",
118+
Encoding.UTF8)
119+
};
120+
121+
var response = await CodeGenerator.Generate(request);
122+
var csprojFile = response.Files.First(f => f.Name == $"{request.Settings.Codegen.Out}.csproj");
123+
XmlDocument doc = new ();
124+
doc.LoadXml(csprojFile.Contents.ToStringUtf8());
125+
126+
var centralPackageManagementNode = doc.SelectSingleNode("//ManagePackageVersionsCentrally");
127+
Assert.That(centralPackageManagementNode, Is.Not.Null);
128+
Assert.That(centralPackageManagementNode.InnerText, Is.EqualTo("False"));
129+
130+
var firstPackageReference = doc.SelectSingleNode("//PackageReference[@Version]");
131+
Assert.That(firstPackageReference, Is.Not.Null);
132+
}
133+
134+
[Test]
135+
public async Task TestGenerationWithCentralPackageManagement()
136+
{
137+
GenerateRequest request = new ()
138+
{
139+
Settings = _mysqlSettings,
140+
Catalog = _emptyCatalog,
141+
PluginOptions =
142+
ByteString.CopyFrom("{\"useCentralPackageManagement\": true}",
143+
Encoding.UTF8)
144+
};
145+
146+
var response = await CodeGenerator.Generate(request);
147+
var csprojFile = response.Files.First(f => f.Name == $"{request.Settings.Codegen.Out}.csproj");
148+
XmlDocument doc = new ();
149+
doc.LoadXml(csprojFile.Contents.ToStringUtf8());
150+
151+
var centralPackageManagementNode = doc.SelectSingleNode("//ManagePackageVersionsCentrally");
152+
Assert.That(centralPackageManagementNode, Is.Not.Null);
153+
Assert.That(centralPackageManagementNode.InnerText, Is.EqualTo("True"));
154+
155+
var firstPackageReference = doc.SelectSingleNode("//PackageReference[@Version]");
156+
Assert.That(firstPackageReference, Is.Null);
157+
}
108158
}

0 commit comments

Comments
 (0)