Skip to content

Commit 5180699

Browse files
committed
Add AnalyzerTests project to confirm that the analyzers are actually triggering warnings in a real project
1 parent 1d146fc commit 5180699

5 files changed

Lines changed: 198 additions & 24 deletions

File tree

NetEscapades.EnumGenerators.sln

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetEscapades.EnumGenerators
5353
EndProject
5454
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dependencies.SystemMemory", "tests\Dependencies.SystemMemory\Dependencies.SystemMemory.csproj", "{353AC6E3-0A79-4505-81C1-680B4634B0EB}"
5555
EndProject
56+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetEscapades.EnumGenerators.Nuget.AnalyzerTests", "tests\NetEscapades.EnumGenerators.Nuget.AnalyzerTests\NetEscapades.EnumGenerators.Nuget.AnalyzerTests.csproj", "{0B636065-CA9D-4C07-90BF-6E5B63CB423C}"
57+
EndProject
5658
Global
5759
GlobalSection(SolutionConfigurationPlatforms) = preSolution
5860
Debug|Any CPU = Debug|Any CPU
@@ -77,14 +79,10 @@ Global
7779
{443BC4C1-CF11-45E3-B772-72F886826C69}.Release|x86.Build.0 = Release|Any CPU
7880
{F03831B0-630E-4B0E-BD25-AFE975B35E69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
7981
{F03831B0-630E-4B0E-BD25-AFE975B35E69}.Debug|x64.ActiveCfg = Debug|Any CPU
80-
{F03831B0-630E-4B0E-BD25-AFE975B35E69}.Debug|x64.Build.0 = Debug|Any CPU
8182
{F03831B0-630E-4B0E-BD25-AFE975B35E69}.Debug|x86.ActiveCfg = Debug|Any CPU
82-
{F03831B0-630E-4B0E-BD25-AFE975B35E69}.Debug|x86.Build.0 = Debug|Any CPU
8383
{F03831B0-630E-4B0E-BD25-AFE975B35E69}.Release|Any CPU.ActiveCfg = Release|Any CPU
8484
{F03831B0-630E-4B0E-BD25-AFE975B35E69}.Release|x64.ActiveCfg = Release|Any CPU
85-
{F03831B0-630E-4B0E-BD25-AFE975B35E69}.Release|x64.Build.0 = Release|Any CPU
8685
{F03831B0-630E-4B0E-BD25-AFE975B35E69}.Release|x86.ActiveCfg = Release|Any CPU
87-
{F03831B0-630E-4B0E-BD25-AFE975B35E69}.Release|x86.Build.0 = Release|Any CPU
8886
{328EFEB4-1D15-453E-9929-6FD0FACF3512}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
8987
{328EFEB4-1D15-453E-9929-6FD0FACF3512}.Debug|Any CPU.Build.0 = Debug|Any CPU
9088
{328EFEB4-1D15-453E-9929-6FD0FACF3512}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -157,14 +155,10 @@ Global
157155
{7A0F5EA5-DB7B-49E0-827D-946C80175322}.Release|x86.Build.0 = Release|Any CPU
158156
{1A1B48ED-DDE7-4017-A86B-5F7D2FB3A3D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
159157
{1A1B48ED-DDE7-4017-A86B-5F7D2FB3A3D0}.Debug|x64.ActiveCfg = Debug|Any CPU
160-
{1A1B48ED-DDE7-4017-A86B-5F7D2FB3A3D0}.Debug|x64.Build.0 = Debug|Any CPU
161158
{1A1B48ED-DDE7-4017-A86B-5F7D2FB3A3D0}.Debug|x86.ActiveCfg = Debug|Any CPU
162-
{1A1B48ED-DDE7-4017-A86B-5F7D2FB3A3D0}.Debug|x86.Build.0 = Debug|Any CPU
163159
{1A1B48ED-DDE7-4017-A86B-5F7D2FB3A3D0}.Release|Any CPU.ActiveCfg = Release|Any CPU
164160
{1A1B48ED-DDE7-4017-A86B-5F7D2FB3A3D0}.Release|x64.ActiveCfg = Release|Any CPU
165-
{1A1B48ED-DDE7-4017-A86B-5F7D2FB3A3D0}.Release|x64.Build.0 = Release|Any CPU
166161
{1A1B48ED-DDE7-4017-A86B-5F7D2FB3A3D0}.Release|x86.ActiveCfg = Release|Any CPU
167-
{1A1B48ED-DDE7-4017-A86B-5F7D2FB3A3D0}.Release|x86.Build.0 = Release|Any CPU
168162
{E390E06A-27EE-49B3-9113-37812B92060A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
169163
{E390E06A-27EE-49B3-9113-37812B92060A}.Debug|Any CPU.Build.0 = Debug|Any CPU
170164
{E390E06A-27EE-49B3-9113-37812B92060A}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -203,24 +197,16 @@ Global
203197
{EA85D7C6-8691-47B9-92D1-DCDA98E16D02}.Release|x86.Build.0 = Release|Any CPU
204198
{0011A3F4-BBFC-40CE-B8A3-A23FDAC60DE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
205199
{0011A3F4-BBFC-40CE-B8A3-A23FDAC60DE7}.Debug|x64.ActiveCfg = Debug|Any CPU
206-
{0011A3F4-BBFC-40CE-B8A3-A23FDAC60DE7}.Debug|x64.Build.0 = Debug|Any CPU
207200
{0011A3F4-BBFC-40CE-B8A3-A23FDAC60DE7}.Debug|x86.ActiveCfg = Debug|Any CPU
208-
{0011A3F4-BBFC-40CE-B8A3-A23FDAC60DE7}.Debug|x86.Build.0 = Debug|Any CPU
209201
{0011A3F4-BBFC-40CE-B8A3-A23FDAC60DE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
210202
{0011A3F4-BBFC-40CE-B8A3-A23FDAC60DE7}.Release|x64.ActiveCfg = Release|Any CPU
211-
{0011A3F4-BBFC-40CE-B8A3-A23FDAC60DE7}.Release|x64.Build.0 = Release|Any CPU
212203
{0011A3F4-BBFC-40CE-B8A3-A23FDAC60DE7}.Release|x86.ActiveCfg = Release|Any CPU
213-
{0011A3F4-BBFC-40CE-B8A3-A23FDAC60DE7}.Release|x86.Build.0 = Release|Any CPU
214204
{99AC1B59-04D1-4B19-957B-D7DE4D19A7CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
215205
{99AC1B59-04D1-4B19-957B-D7DE4D19A7CD}.Debug|x64.ActiveCfg = Debug|Any CPU
216-
{99AC1B59-04D1-4B19-957B-D7DE4D19A7CD}.Debug|x64.Build.0 = Debug|Any CPU
217206
{99AC1B59-04D1-4B19-957B-D7DE4D19A7CD}.Debug|x86.ActiveCfg = Debug|Any CPU
218-
{99AC1B59-04D1-4B19-957B-D7DE4D19A7CD}.Debug|x86.Build.0 = Debug|Any CPU
219207
{99AC1B59-04D1-4B19-957B-D7DE4D19A7CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
220208
{99AC1B59-04D1-4B19-957B-D7DE4D19A7CD}.Release|x64.ActiveCfg = Release|Any CPU
221-
{99AC1B59-04D1-4B19-957B-D7DE4D19A7CD}.Release|x64.Build.0 = Release|Any CPU
222209
{99AC1B59-04D1-4B19-957B-D7DE4D19A7CD}.Release|x86.ActiveCfg = Release|Any CPU
223-
{99AC1B59-04D1-4B19-957B-D7DE4D19A7CD}.Release|x86.Build.0 = Release|Any CPU
224210
{C26CDBC7-5CC3-4F55-8910-095D77DF7FD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
225211
{C26CDBC7-5CC3-4F55-8910-095D77DF7FD4}.Debug|Any CPU.Build.0 = Debug|Any CPU
226212
{C26CDBC7-5CC3-4F55-8910-095D77DF7FD4}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -283,24 +269,16 @@ Global
283269
{9F8D5098-AC2F-4F84-BAA8-000F38B732D3}.Release|x86.Build.0 = Release|Any CPU
284270
{76BAAC07-DDD4-4EDB-92AF-B7E71FC3BADC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
285271
{76BAAC07-DDD4-4EDB-92AF-B7E71FC3BADC}.Debug|x64.ActiveCfg = Debug|Any CPU
286-
{76BAAC07-DDD4-4EDB-92AF-B7E71FC3BADC}.Debug|x64.Build.0 = Debug|Any CPU
287272
{76BAAC07-DDD4-4EDB-92AF-B7E71FC3BADC}.Debug|x86.ActiveCfg = Debug|Any CPU
288-
{76BAAC07-DDD4-4EDB-92AF-B7E71FC3BADC}.Debug|x86.Build.0 = Debug|Any CPU
289273
{76BAAC07-DDD4-4EDB-92AF-B7E71FC3BADC}.Release|Any CPU.ActiveCfg = Release|Any CPU
290274
{76BAAC07-DDD4-4EDB-92AF-B7E71FC3BADC}.Release|x64.ActiveCfg = Release|Any CPU
291-
{76BAAC07-DDD4-4EDB-92AF-B7E71FC3BADC}.Release|x64.Build.0 = Release|Any CPU
292275
{76BAAC07-DDD4-4EDB-92AF-B7E71FC3BADC}.Release|x86.ActiveCfg = Release|Any CPU
293-
{76BAAC07-DDD4-4EDB-92AF-B7E71FC3BADC}.Release|x86.Build.0 = Release|Any CPU
294276
{2B0C8B55-5985-45FD-86D2-4AF98D619CB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
295277
{2B0C8B55-5985-45FD-86D2-4AF98D619CB3}.Debug|x64.ActiveCfg = Debug|Any CPU
296-
{2B0C8B55-5985-45FD-86D2-4AF98D619CB3}.Debug|x64.Build.0 = Debug|Any CPU
297278
{2B0C8B55-5985-45FD-86D2-4AF98D619CB3}.Debug|x86.ActiveCfg = Debug|Any CPU
298-
{2B0C8B55-5985-45FD-86D2-4AF98D619CB3}.Debug|x86.Build.0 = Debug|Any CPU
299279
{2B0C8B55-5985-45FD-86D2-4AF98D619CB3}.Release|Any CPU.ActiveCfg = Release|Any CPU
300280
{2B0C8B55-5985-45FD-86D2-4AF98D619CB3}.Release|x64.ActiveCfg = Release|Any CPU
301-
{2B0C8B55-5985-45FD-86D2-4AF98D619CB3}.Release|x64.Build.0 = Release|Any CPU
302281
{2B0C8B55-5985-45FD-86D2-4AF98D619CB3}.Release|x86.ActiveCfg = Release|Any CPU
303-
{2B0C8B55-5985-45FD-86D2-4AF98D619CB3}.Release|x86.Build.0 = Release|Any CPU
304282
{353AC6E3-0A79-4505-81C1-680B4634B0EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
305283
{353AC6E3-0A79-4505-81C1-680B4634B0EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
306284
{353AC6E3-0A79-4505-81C1-680B4634B0EB}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -313,6 +291,12 @@ Global
313291
{353AC6E3-0A79-4505-81C1-680B4634B0EB}.Release|x64.Build.0 = Release|Any CPU
314292
{353AC6E3-0A79-4505-81C1-680B4634B0EB}.Release|x86.ActiveCfg = Release|Any CPU
315293
{353AC6E3-0A79-4505-81C1-680B4634B0EB}.Release|x86.Build.0 = Release|Any CPU
294+
{0B636065-CA9D-4C07-90BF-6E5B63CB423C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
295+
{0B636065-CA9D-4C07-90BF-6E5B63CB423C}.Debug|x64.ActiveCfg = Debug|Any CPU
296+
{0B636065-CA9D-4C07-90BF-6E5B63CB423C}.Debug|x86.ActiveCfg = Debug|Any CPU
297+
{0B636065-CA9D-4C07-90BF-6E5B63CB423C}.Release|Any CPU.ActiveCfg = Release|Any CPU
298+
{0B636065-CA9D-4C07-90BF-6E5B63CB423C}.Release|x64.ActiveCfg = Release|Any CPU
299+
{0B636065-CA9D-4C07-90BF-6E5B63CB423C}.Release|x86.ActiveCfg = Release|Any CPU
316300
EndGlobalSection
317301
GlobalSection(SolutionProperties) = preSolution
318302
HideSolutionNode = FALSE
@@ -339,5 +323,6 @@ Global
339323
{76BAAC07-DDD4-4EDB-92AF-B7E71FC3BADC} = {FF6F43E8-36EA-4BF0-9B2E-8ACC91C5F939}
340324
{2B0C8B55-5985-45FD-86D2-4AF98D619CB3} = {FF6F43E8-36EA-4BF0-9B2E-8ACC91C5F939}
341325
{353AC6E3-0A79-4505-81C1-680B4634B0EB} = {FF6F43E8-36EA-4BF0-9B2E-8ACC91C5F939}
326+
{0B636065-CA9D-4C07-90BF-6E5B63CB423C} = {FF6F43E8-36EA-4BF0-9B2E-8ACC91C5F939}
342327
EndGlobalSection
343328
EndGlobal

build/Build.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
using System;
2+
using System.Collections.Concurrent;
3+
using System.Collections.Generic;
4+
using System.Linq;
15
using Nuke.Common;
26
using Nuke.Common.CI;
37
using Nuke.Common.CI.GitHubActions;
@@ -138,6 +142,52 @@ class Build : NukeBuild
138142
.SetLoggers("trx")
139143
.SetResultsDirectory(TestResultsDirectory))
140144
.CombineWith(projectFiles, (s, p) => s.SetProjectFile(p)));
145+
146+
// Now test the analyzers in the package cause warnings as expected
147+
var expectedAnalyzerErrors = new[]
148+
{
149+
"NEEG004",
150+
"NEEG005",
151+
"NEEG006",
152+
"NEEG007",
153+
"NEEG008",
154+
"NEEG009",
155+
"NEEG010",
156+
"NEEG011",
157+
};
158+
159+
DotNetRestore(s => s
160+
.When(!string.IsNullOrEmpty(PackagesDirectory), x => x.SetPackageDirectory(PackagesDirectory))
161+
.SetConfigFile(RootDirectory / "NuGet.integration-tests.config")
162+
.SetProjectFile(Solution.tests.NetEscapades_EnumGenerators_Nuget_AnalyzerTests));
163+
164+
// Capture the logs so that we don't pollute the CI etc build output
165+
var buildLogs = new ConcurrentQueue<string>();
166+
DotNetBuild(s => s
167+
.When(!string.IsNullOrEmpty(PackagesDirectory), x => x.SetPackageDirectory(PackagesDirectory))
168+
.EnableNoRestore()
169+
.SetConfiguration(Configuration)
170+
.SetProcessLogger((_, log) => buildLogs.Enqueue(log))
171+
.SetNoIncremental(true) // force rebuild so if run twice we still get valid results
172+
.SetProjectFile(Solution.tests.NetEscapades_EnumGenerators_Nuget_AnalyzerTests));
173+
174+
// verify that we have errors
175+
foreach (var expectedAnalyzerError in expectedAnalyzerErrors)
176+
{
177+
var foundLogs = buildLogs.Any(x => x.Contains(expectedAnalyzerError));
178+
Serilog.Log.Information("Checking for {AnalyzerOutput}: {FoundLogs}", expectedAnalyzerError, foundLogs);
179+
if (!foundLogs)
180+
{
181+
// print the output
182+
foreach (var buildLog in buildLogs)
183+
{
184+
Serilog.Log.Debug(buildLog);
185+
}
186+
187+
throw new Exception("Analyzer output did not contain expected analyzer error: " +
188+
expectedAnalyzerError);
189+
}
190+
}
141191
});
142192

143193
Target PushToNuGet => _ => _

tests/NetEscapades.EnumGenerators.IntegrationTests/Enums.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ namespace NetEscapades.EnumGenerators.Nuget.Interceptors.IntegrationTests
6767
namespace NetEscapades.EnumGenerators.Nuget.NetStandard.Interceptors.IntegrationTests
6868
#elif NUGET_SYSTEMMEMORY_INTEGRATION_TESTS
6969
namespace NetEscapades.EnumGenerators.Nuget.SystemMemory.IntegrationTests
70+
#elif NUGET_ANALYZER_TESTS
71+
namespace NetEscapades.EnumGenerators.Nuget.AnalyzerTests
7072
#else
7173
#error Unknown integration tests
7274
#endif
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
using System;
2+
3+
namespace NetEscapades.EnumGenerators.Nuget.AnalyzerTests;
4+
5+
public class AnalyzerTests
6+
{
7+
// These method calls should all be flagged by the analyzer and should cause failures to build
8+
public void Neeg004Testing()
9+
{
10+
var test = EnumInSystem.First;
11+
_ = test.ToString();
12+
_ = EnumInSystem.First.ToString();
13+
_ = EnumInSystem.First.ToString("G");
14+
_ = EnumInSystem.First.ToString("x"); // no error
15+
_ = EnumInSystem.First.ToString(format: "g");
16+
_ = EnumInSystem.First.ToString(format: null); // no error
17+
_ = DateTimeKind.Local.ToString();
18+
_ = $"Some value: {test} <-";
19+
_ = $"Some value: {test:G} <-";
20+
_ = $"Some value: {EnumInSystem.First} <-";
21+
_ = $"Some value: {EnumInSystem.First:G} <-";
22+
}
23+
24+
public void Neeg005Testing()
25+
{
26+
var test = FlagsEnum.First;
27+
_ = test.HasFlag(FlagsEnum.Second);
28+
_ = $"Some value: {test.HasFlag(FlagsEnum.Second)} <-";
29+
}
30+
31+
public void Neeg006Testing()
32+
{
33+
var test = FlagsEnum.First;
34+
_ = Enum.IsDefined(typeof(FlagsEnum), FlagsEnum.Second);
35+
_ = Enum.IsDefined(typeof(FlagsEnum), test);
36+
_ = FlagsEnum.IsDefined(typeof(FlagsEnum), (FlagsEnum)23);
37+
_ = $"Some value: {Enum.IsDefined(typeof(FlagsEnum), test)} <-";
38+
39+
#if NET5_0_OR_GREATER
40+
_ = Enum.IsDefined<FlagsEnum>((FlagsEnum)23);
41+
_ = Enum.IsDefined((FlagsEnum)23);
42+
_ = Enum.IsDefined(test);
43+
_ = FlagsEnum.IsDefined((FlagsEnum)23);
44+
_ = FlagsEnum.IsDefined(test);
45+
_ = $"Some value: {Enum.IsDefined((FlagsEnum)23)} <-";
46+
#endif
47+
}
48+
49+
public void Neeg007Testing()
50+
{
51+
_ = Enum.Parse(typeof(FlagsEnum), "Second");
52+
_ = Enum.Parse(typeof(FlagsEnum), "Second", true);
53+
_ = Enum.Parse(typeof(FlagsEnum), "Second", ignoreCase: false);
54+
#if NETCOREAPP
55+
_ = Enum.Parse<FlagsEnum>("Second");
56+
_ = Enum.Parse<FlagsEnum>("Second", true);
57+
_ = $"Some value: {Enum.Parse(typeof(FlagsEnum), "First")} <-";
58+
59+
#if NET5_0_OR_GREATER
60+
var toParse = "Second".AsSpan();
61+
_ = Enum.Parse(typeof(FlagsEnum), toParse);
62+
_ = Enum.Parse(typeof(FlagsEnum), toParse, ignoreCase: true);
63+
_ = Enum.Parse<FlagsEnum>(toParse);
64+
_ = Enum.Parse<FlagsEnum>(toParse, true);
65+
_ = $"Some value: {Enum.Parse(typeof(FlagsEnum), "First".AsSpan())} <-";
66+
#endif
67+
#endif
68+
}
69+
70+
public void Neeg008Testing()
71+
{
72+
_ = Enum.GetNames(typeof(FlagsEnum));
73+
#if NET5_0_OR_GREATER
74+
_ = Enum.GetNames<FlagsEnum>().Length;
75+
#endif
76+
}
77+
78+
public void Neeg009Testing()
79+
{
80+
_ = Enum.GetValues(typeof(FlagsEnum));
81+
#if NET5_0_OR_GREATER
82+
_ = Enum.GetValues<FlagsEnum>().Length;
83+
#endif
84+
}
85+
86+
#if NET7_0_OR_GREATER
87+
public void Neeg010Testing()
88+
{
89+
_ = Enum.GetValuesAsUnderlyingType(typeof(FlagsEnum));
90+
_ = Enum.GetValuesAsUnderlyingType<FlagsEnum>().Length;
91+
}
92+
#endif
93+
94+
public void Neeg011Testing()
95+
{
96+
_ = Enum.TryParse<FlagsEnum>("Second", out _);
97+
Enum.TryParse<FlagsEnum>("Second", true, out var e);
98+
_ = $"Some value: {Enum.TryParse<FlagsEnum>("First", out _)} <-";
99+
#if NETCOREAPP
100+
_ = Enum.TryParse(typeof(FlagsEnum), "Second", out var t);
101+
_ = Enum.TryParse(typeof(FlagsEnum), "Second", true, out object? t2);
102+
_ = Enum.TryParse(typeof(FlagsEnum), "Second", ignoreCase: false, out _);
103+
#if NET5_0_OR_GREATER
104+
var toParse = "Second".AsSpan();
105+
_ = Enum.TryParse(typeof(FlagsEnum), toParse, out _);
106+
_ = Enum.TryParse(typeof(FlagsEnum), toParse, ignoreCase: true, out _);
107+
_ = Enum.TryParse<FlagsEnum>(toParse, out _);
108+
_ = Enum.TryParse<FlagsEnum>(toParse, true, out _);
109+
_ = $"Some value: {Enum.TryParse(typeof(FlagsEnum), "First".AsSpan(), out _)} <-";
110+
#endif
111+
#endif
112+
}
113+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<IsPackable>false</IsPackable>
5+
<Nullable>enable</Nullable>
6+
<DefineConstants Condition="'$(TargetFramework)' != 'net48'">$(DefineConstants);READONLYSPAN</DefineConstants>
7+
<DefineConstants>$(DefineConstants);NUGET_ANALYZER_TESTS</DefineConstants>
8+
<EnumGenerator_EnableUsageAnalyzers>true</EnumGenerator_EnableUsageAnalyzers>
9+
</PropertyGroup>
10+
11+
<ItemGroup>
12+
<Content Include="..\NetEscapades.EnumGenerators.IntegrationTests\xunit.runner.json" CopyToOutputDirectory="PreserveNewest" />
13+
</ItemGroup>
14+
15+
<ItemGroup>
16+
<PackageReference Include="NetEscapades.EnumGenerators" Version="$(Version)" PrivateAssets="All" />
17+
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" Condition="'$(TargetFramework)' == 'net48'" />
18+
</ItemGroup>
19+
20+
<ItemGroup>
21+
<Compile Include="..\NetEscapades.EnumGenerators.IntegrationTests\Enums.cs" Link="%(Filename)%(Extension)" />
22+
</ItemGroup>
23+
24+
</Project>

0 commit comments

Comments
 (0)