diff --git a/docs/CodeDoc/Atc.Console.Spectre/Atc.Console.Spectre.md b/docs/CodeDoc/Atc.Console.Spectre/Atc.Console.Spectre.md
index 452415be..609c9789 100644
--- a/docs/CodeDoc/Atc.Console.Spectre/Atc.Console.Spectre.md
+++ b/docs/CodeDoc/Atc.Console.Spectre/Atc.Console.Spectre.md
@@ -40,9 +40,9 @@
>```csharp
>string ArgumentShortHelp
>```
-#### ArgumentShortVerbose
+#### ArgumentShortVersion
>```csharp
->string ArgumentShortVerbose
+>string ArgumentShortVersion
>```
#### NameOptionsFile
>```csharp
diff --git a/docs/CodeDoc/Atc.Console.Spectre/IndexExtended.md b/docs/CodeDoc/Atc.Console.Spectre/IndexExtended.md
index 22c22567..bb3b3a2d 100644
--- a/docs/CodeDoc/Atc.Console.Spectre/IndexExtended.md
+++ b/docs/CodeDoc/Atc.Console.Spectre/IndexExtended.md
@@ -13,7 +13,7 @@
- string ArgumentLongVerbose
- string ArgumentLongVersion
- string ArgumentShortHelp
- - string ArgumentShortVerbose
+ - string ArgumentShortVersion
- string NameOptionsFile
- string NameOptionsFileCreate
- string NameOptionsFileValidate
diff --git a/docs/CodeDoc/Atc/Atc.Helpers.md b/docs/CodeDoc/Atc/Atc.Helpers.md
index 9c997452..0ae316ce 100644
--- a/docs/CodeDoc/Atc/Atc.Helpers.md
+++ b/docs/CodeDoc/Atc/Atc.Helpers.md
@@ -140,6 +140,15 @@ The AssemblyHelper module contains procedures used to preform assembly operation
>Summary: Gets the assembly informations by system.
>
>Returns: The array of `Atc.Data.Models.AssemblyInformation`.
+#### GetProjectRootDirectory
+>```csharp
+>DirectoryInfo GetProjectRootDirectory()
+>```
+>Summary: Retrieves the project root directory by searching upwards from the current assembly's base directory. The method looks for a directory containing a .csproj or .sln file, which is commonly found in the root of a C# project.
+>
+>Returns: A `System.IO.DirectoryInfo` object representing the project root directory, or the assembly's base directory if the project root cannot be determined.
+>
+>Remarks: This method starts at the current assembly's base directory and moves up the directory tree until it finds a directory containing at least one .csproj or .sln file. This directory is considered the project root. If no such directory is found, the method defaults to returning the base directory of the application domain. This approach allows the method to be more adaptable to various project structures without relying on a fixed directory depth. However, it assumes that the project root will contain at least one .csproj or .sln file.
#### GetSystemLocation
>```csharp
>string GetSystemLocation()
diff --git a/docs/CodeDoc/Atc/IndexExtended.md b/docs/CodeDoc/Atc/IndexExtended.md
index 86c2f2c8..c6680e84 100644
--- a/docs/CodeDoc/Atc/IndexExtended.md
+++ b/docs/CodeDoc/Atc/IndexExtended.md
@@ -4409,6 +4409,7 @@
- GetAssemblyInformations()
- GetAssemblyInformationsByStartsWith(string value)
- GetAssemblyInformationsBySystem()
+ - GetProjectRootDirectory()
- GetSystemLocation()
- GetSystemLocationPath()
- GetSystemName()
diff --git a/src/Atc/Helpers/AssemblyHelper.cs b/src/Atc/Helpers/AssemblyHelper.cs
index e3cd89d6..ed107bd8 100644
--- a/src/Atc/Helpers/AssemblyHelper.cs
+++ b/src/Atc/Helpers/AssemblyHelper.cs
@@ -5,6 +5,35 @@ namespace Atc.Helpers;
///
public static class AssemblyHelper
{
+ ///
+ /// Retrieves the project root directory by searching upwards from the current assembly's base directory.
+ /// The method looks for a directory containing a .csproj or .sln file, which is commonly found in the root of a C# project.
+ ///
+ ///
+ /// This method starts at the current assembly's base directory and moves up the directory tree until it finds a directory
+ /// containing at least one .csproj or .sln file. This directory is considered the project root. If no such directory is found,
+ /// the method defaults to returning the base directory of the application domain.
+ /// This approach allows the method to be more adaptable to various project structures without relying on a fixed directory depth.
+ /// However, it assumes that the project root will contain at least one .csproj or .sln file.
+ ///
+ ///
+ /// A object representing the project root directory,
+ /// or the assembly's base directory if the project root cannot be determined.
+ ///
+ public static DirectoryInfo GetProjectRootDirectory()
+ {
+ var directory = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory);
+
+ while (directory is not null &&
+ directory.GetFiles("*.csproj").Length == 0 &&
+ directory.GetFiles("*.sln").Length == 0)
+ {
+ directory = directory.Parent;
+ }
+
+ return directory ?? new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory);
+ }
+
///
/// Load the specified assembly file, with a reference to memory and not the specified file.
///
diff --git a/test/Atc.DotNet.Tests/Atc.DotNet.Tests.csproj b/test/Atc.DotNet.Tests/Atc.DotNet.Tests.csproj
index 8a348b3a..81184d70 100644
--- a/test/Atc.DotNet.Tests/Atc.DotNet.Tests.csproj
+++ b/test/Atc.DotNet.Tests/Atc.DotNet.Tests.csproj
@@ -5,6 +5,12 @@
false
+
+
+
+
+
+
diff --git a/test/Atc.DotNet.Tests/DotnetCsProjFileHelperTests.cs b/test/Atc.DotNet.Tests/DotnetCsProjFileHelperTests.cs
index d9e1fcac..af27318b 100644
--- a/test/Atc.DotNet.Tests/DotnetCsProjFileHelperTests.cs
+++ b/test/Atc.DotNet.Tests/DotnetCsProjFileHelperTests.cs
@@ -153,6 +153,43 @@ public void GetProjectType_FileContent(
Assert.Equal(expected, actual);
}
+ [Theory]
+ [InlineData(DotnetProjectType.AzureFunctionApp, "AzureFunctionApp1")]
+ [InlineData(DotnetProjectType.BlazorServerApp, "BlazorServerApp1")]
+ [InlineData(DotnetProjectType.BlazorWAsmApp, "BlazorWebAssemblyApp1")]
+ [InlineData(DotnetProjectType.BlazorWAsmApp, "BlazorWebAssemblyStandaloneApp1")]
+ [InlineData(DotnetProjectType.Library, "ClassLibrary1")]
+ [InlineData(DotnetProjectType.CliApp, "CliApp1")]
+ [InlineData(DotnetProjectType.ConsoleApp, "ConsoleApp1")]
+ [InlineData(DotnetProjectType.MauiApp, "MauiApp1")]
+ [InlineData(DotnetProjectType.MsTest, "MsTestProject1")]
+ [InlineData(DotnetProjectType.WebApp, "WebApplication1")]
+ [InlineData(DotnetProjectType.WebApp, "WebApplication2")]
+ [InlineData(DotnetProjectType.WebApi, "WebApi1")]
+ [InlineData(DotnetProjectType.Library, "WindowsFormsControlLibrary1")]
+ [InlineData(DotnetProjectType.WinFormApp, "WinFormsApp1")]
+ [InlineData(DotnetProjectType.WpfApp, "WpfApp1")]
+ public void FindAllInPathAndPredictProjectTypes(
+ DotnetProjectType expected,
+ string projectName)
+ {
+ // Arrange
+ var sampleTypesDirectory = new DirectoryInfo(
+ Path.Combine(
+ AssemblyHelper.GetProjectRootDirectory().FullName,
+ "XUnitTestDataProjectSampleTypes"));
+
+ // Act
+ var actual = DotnetCsProjFileHelper.FindAllInPathAndPredictProjectTypes(sampleTypesDirectory);
+
+ // Assert
+ Assert.NotNull(actual);
+
+ var (actualCsProjFile, actualProjectType) = actual.FirstOrDefault(x => x.CsProjFile.Directory!.Name == projectName);
+ Assert.Equal(expected, actualProjectType);
+ Assert.Equal($"{projectName}.csproj", actualCsProjFile.Name);
+ }
+
private static Task CreateCsProjFile(
DirectoryInfo workingDirectory,
string fileName,
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/AzureFunctionApp1/AzureFunctionApp1.csproj b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/AzureFunctionApp1/AzureFunctionApp1.csproj
new file mode 100644
index 00000000..986f9480
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/AzureFunctionApp1/AzureFunctionApp1.csproj
@@ -0,0 +1,18 @@
+
+
+ net6.0
+ v4
+
+
+
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+ Never
+
+
+
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorServerApp1/BlazorServerApp1.csproj b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorServerApp1/BlazorServerApp1.csproj
new file mode 100644
index 00000000..c78c9c7e
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorServerApp1/BlazorServerApp1.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net6.0
+ enable
+ enable
+
+
+
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorServerApp1/Program.cs b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorServerApp1/Program.cs
new file mode 100644
index 00000000..81dd0a34
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorServerApp1/Program.cs
@@ -0,0 +1,31 @@
+using BlazorServerApp1.Data;
+using Microsoft.AspNetCore.Components;
+using Microsoft.AspNetCore.Components.Web;
+
+var builder = WebApplication.CreateBuilder(args);
+
+// Add services to the container.
+builder.Services.AddRazorPages();
+builder.Services.AddServerSideBlazor();
+builder.Services.AddSingleton();
+
+var app = builder.Build();
+
+// Configure the HTTP request pipeline.
+if (!app.Environment.IsDevelopment())
+{
+ app.UseExceptionHandler("/Error");
+ // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
+ app.UseHsts();
+}
+
+app.UseHttpsRedirection();
+
+app.UseStaticFiles();
+
+app.UseRouting();
+
+app.MapBlazorHub();
+app.MapFallbackToPage("/_Host");
+
+app.Run();
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorWebAssemblyApp1/BlazorWebAssemblyApp1.Client/BlazorWebAssemblyApp1.Client.csproj b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorWebAssemblyApp1/BlazorWebAssemblyApp1.Client/BlazorWebAssemblyApp1.Client.csproj
new file mode 100644
index 00000000..7aa63b5e
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorWebAssemblyApp1/BlazorWebAssemblyApp1.Client/BlazorWebAssemblyApp1.Client.csproj
@@ -0,0 +1,15 @@
+
+
+
+ net8.0
+ enable
+ enable
+ true
+ Default
+
+
+
+
+
+
+
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorWebAssemblyApp1/BlazorWebAssemblyApp1.Client/Program.cs b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorWebAssemblyApp1/BlazorWebAssemblyApp1.Client/Program.cs
new file mode 100644
index 00000000..519269f2
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorWebAssemblyApp1/BlazorWebAssemblyApp1.Client/Program.cs
@@ -0,0 +1,5 @@
+using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
+
+var builder = WebAssemblyHostBuilder.CreateDefault(args);
+
+await builder.Build().RunAsync();
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorWebAssemblyApp1/BlazorWebAssemblyApp1/BlazorWebAssemblyApp1.csproj b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorWebAssemblyApp1/BlazorWebAssemblyApp1/BlazorWebAssemblyApp1.csproj
new file mode 100644
index 00000000..880c2a47
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorWebAssemblyApp1/BlazorWebAssemblyApp1/BlazorWebAssemblyApp1.csproj
@@ -0,0 +1,14 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+
+
+
+
+
+
+
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorWebAssemblyApp1/BlazorWebAssemblyApp1/Program.cs b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorWebAssemblyApp1/BlazorWebAssemblyApp1/Program.cs
new file mode 100644
index 00000000..7704c39f
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorWebAssemblyApp1/BlazorWebAssemblyApp1/Program.cs
@@ -0,0 +1,33 @@
+using BlazorWebAssemblyApp1.Client.Pages;
+using BlazorWebAssemblyApp1.Components;
+
+var builder = WebApplication.CreateBuilder(args);
+
+// Add services to the container.
+builder.Services.AddRazorComponents()
+ .AddInteractiveWebAssemblyComponents();
+
+var app = builder.Build();
+
+// Configure the HTTP request pipeline.
+if (app.Environment.IsDevelopment())
+{
+ app.UseWebAssemblyDebugging();
+}
+else
+{
+ app.UseExceptionHandler("/Error", createScopeForErrors: true);
+ // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
+ app.UseHsts();
+}
+
+app.UseHttpsRedirection();
+
+app.UseStaticFiles();
+app.UseAntiforgery();
+
+app.MapRazorComponents()
+ .AddInteractiveWebAssemblyRenderMode()
+ .AddAdditionalAssemblies(typeof(BlazorWebAssemblyApp1.Client._Imports).Assembly);
+
+app.Run();
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorWebAssemblyStandaloneApp1/BlazorWebAssemblyStandaloneApp1.csproj b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorWebAssemblyStandaloneApp1/BlazorWebAssemblyStandaloneApp1.csproj
new file mode 100644
index 00000000..0edf64a9
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorWebAssemblyStandaloneApp1/BlazorWebAssemblyStandaloneApp1.csproj
@@ -0,0 +1,14 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+
+
+
+
+
+
+
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorWebAssemblyStandaloneApp1/Program.cs b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorWebAssemblyStandaloneApp1/Program.cs
new file mode 100644
index 00000000..baaa3965
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/BlazorWebAssemblyStandaloneApp1/Program.cs
@@ -0,0 +1,11 @@
+using BlazorWebAssemblyStandaloneApp1;
+using Microsoft.AspNetCore.Components.Web;
+using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
+
+var builder = WebAssemblyHostBuilder.CreateDefault(args);
+builder.RootComponents.Add("#app");
+builder.RootComponents.Add("head::after");
+
+builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
+
+await builder.Build().RunAsync();
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/ClassLibrary1/ClassLibrary1.csproj b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/ClassLibrary1/ClassLibrary1.csproj
new file mode 100644
index 00000000..132c02c5
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/ClassLibrary1/ClassLibrary1.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net6.0
+ enable
+ enable
+
+
+
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/CliApp1/CliApp1.csproj b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/CliApp1/CliApp1.csproj
new file mode 100644
index 00000000..86c13bc3
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/CliApp1/CliApp1.csproj
@@ -0,0 +1,32 @@
+
+
+
+ net6.0
+ atc-rest-api-generator
+ rest;api;netstandard;generator
+ A .NET Core Web API C# code generator using a OpenApi 3.0.x specification YAML file.
+ Atc API Generator CLI
+ Exe
+ atc-rest-api-generator
+ true
+ pdbonly
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Always
+
+
+
+
\ No newline at end of file
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/CliApp1/Program.cs b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/CliApp1/Program.cs
new file mode 100644
index 00000000..9abef338
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/CliApp1/Program.cs
@@ -0,0 +1,123 @@
+// ReSharper disable InvertIf
+namespace Atc.Rest.ApiGenerator.CLI;
+
+[ExcludeFromCodeCoverage]
+public static class Program
+{
+ public static Task Main(
+ string[] args)
+ {
+ ArgumentNullException.ThrowIfNull(args);
+
+ args = SetOutputPathFromDotArgumentIfNeeded(args);
+ args = SetHelpArgumentIfNeeded(args);
+
+ var configuration = new ConfigurationBuilder()
+ .AddJsonFile("appsettings.json", optional: true, reloadOnChange: false)
+ .Build();
+
+ var consoleLoggerConfiguration = new ConsoleLoggerConfiguration();
+ configuration.GetRequiredSection("ConsoleLogger").Bind(consoleLoggerConfiguration);
+
+ ProgramCsHelper.SetMinimumLogLevelIfNeeded(args, consoleLoggerConfiguration);
+
+ var serviceCollection = ServiceCollectionFactory.Create(consoleLoggerConfiguration);
+
+ serviceCollection.AddSingleton();
+ serviceCollection.AddSingleton();
+ serviceCollection.AddSingleton();
+ serviceCollection.AddSingleton();
+ serviceCollection.AddSingleton();
+ serviceCollection.AddSingleton();
+
+ var app = CommandAppFactory.CreateWithRootCommand(serviceCollection);
+ app.ConfigureCommands();
+
+ return app.RunAsync(args);
+ }
+
+ private static string[] SetOutputPathFromDotArgumentIfNeeded(
+ string[] args)
+ {
+ if (!args.Contains(".", StringComparer.Ordinal))
+ {
+ return args;
+ }
+
+ var newArgs = new List();
+ foreach (var s in args)
+ {
+ if (".".Equals(s, StringComparison.Ordinal))
+ {
+ if (!args.Contains("all", StringComparer.OrdinalIgnoreCase) &&
+ !args.Contains("host", StringComparer.OrdinalIgnoreCase) &&
+ !args.Contains("api", StringComparer.OrdinalIgnoreCase) &&
+ !args.Contains("domain", StringComparer.OrdinalIgnoreCase))
+ {
+ newArgs.Add("all");
+ }
+
+ if (newArgs.Contains("all", StringComparer.OrdinalIgnoreCase))
+ {
+ if (!args.Contains(ArgumentCommandConstants.LongServerOutputSolutionPath, StringComparer.OrdinalIgnoreCase))
+ {
+ newArgs.Add(ArgumentCommandConstants.LongServerOutputSolutionPath);
+ }
+
+ newArgs.Add(Environment.CurrentDirectory);
+
+ if (!args.Contains(ArgumentCommandConstants.LongServerOutputSourcePath, StringComparer.OrdinalIgnoreCase))
+ {
+ newArgs.Add(ArgumentCommandConstants.LongServerOutputSourcePath);
+ newArgs.Add(Path.Combine(Environment.CurrentDirectory, "src"));
+ }
+
+ if (!args.Contains(ArgumentCommandConstants.LongServerOutputTestPath, StringComparer.OrdinalIgnoreCase))
+ {
+ newArgs.Add(ArgumentCommandConstants.LongServerOutputTestPath);
+ newArgs.Add(Path.Combine(Environment.CurrentDirectory, "test"));
+ }
+ }
+ else
+ {
+ if (!(args.Contains(ArgumentCommandConstants.ShortOutputPath, StringComparer.OrdinalIgnoreCase) ||
+ args.Contains(ArgumentCommandConstants.LongOutputPath, StringComparer.OrdinalIgnoreCase)))
+ {
+ newArgs.Add(ArgumentCommandConstants.ShortOutputPath);
+ }
+
+ newArgs.Add(Environment.CurrentDirectory);
+ }
+ }
+ else
+ {
+ newArgs.Add(s);
+ }
+ }
+
+ if (!newArgs.Contains(ArgumentCommandConstants.LongConfigurationValidateStrictMode, StringComparer.OrdinalIgnoreCase))
+ {
+ newArgs.Add(ArgumentCommandConstants.LongConfigurationValidateStrictMode);
+ }
+
+ if (!newArgs.Contains(CommandConstants.ArgumentShortVerbose, StringComparer.OrdinalIgnoreCase) ||
+ !newArgs.Contains(CommandConstants.ArgumentLongVerbose, StringComparer.OrdinalIgnoreCase))
+ {
+ newArgs.Add(CommandConstants.ArgumentShortVerbose);
+ }
+
+ return newArgs.ToArray();
+ }
+
+ private static string[] SetHelpArgumentIfNeeded(
+ string[] args)
+ {
+ if (args.Length == 0)
+ {
+ return new[] { CommandConstants.ArgumentShortHelp };
+ }
+
+ // TODO: Add multiple validations
+ return args;
+ }
+}
\ No newline at end of file
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/ConsoleApp1/ConsoleApp1.csproj b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/ConsoleApp1/ConsoleApp1.csproj
new file mode 100644
index 00000000..74abf5c9
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/ConsoleApp1/ConsoleApp1.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net6.0
+ enable
+ enable
+
+
+
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/ConsoleApp1/Program.cs b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/ConsoleApp1/Program.cs
new file mode 100644
index 00000000..3751555c
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/ConsoleApp1/Program.cs
@@ -0,0 +1,2 @@
+// See https://aka.ms/new-console-template for more information
+Console.WriteLine("Hello, World!");
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/MauiApp1/MauiApp1.csproj b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/MauiApp1/MauiApp1.csproj
new file mode 100644
index 00000000..bace5918
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/MauiApp1/MauiApp1.csproj
@@ -0,0 +1,65 @@
+
+
+
+ net8.0-android;net8.0-ios;net8.0-maccatalyst
+ $(TargetFrameworks);net8.0-windows10.0.19041.0
+
+
+
+
+
+
+ Exe
+ MauiApp1
+ true
+ true
+ enable
+ enable
+
+
+ MauiApp1
+
+
+ com.companyname.mauiapp1
+
+
+ 1.0
+ 1
+
+ 11.0
+ 13.1
+ 21.0
+ 10.0.17763.0
+ 10.0.17763.0
+ 6.5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/MauiApp1/MauiProgram.cs b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/MauiApp1/MauiProgram.cs
new file mode 100644
index 00000000..1c5db5a5
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/MauiApp1/MauiProgram.cs
@@ -0,0 +1,25 @@
+using Microsoft.Extensions.Logging;
+
+namespace MauiApp1
+{
+ public static class MauiProgram
+ {
+ public static MauiApp CreateMauiApp()
+ {
+ var builder = MauiApp.CreateBuilder();
+ builder
+ .UseMauiApp()
+ .ConfigureFonts(fonts =>
+ {
+ fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
+ fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
+ });
+
+#if DEBUG
+ builder.Logging.AddDebug();
+#endif
+
+ return builder.Build();
+ }
+ }
+}
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/MsTestProject1/MsTestProject1.csproj b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/MsTestProject1/MsTestProject1.csproj
new file mode 100644
index 00000000..f72bee82
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/MsTestProject1/MsTestProject1.csproj
@@ -0,0 +1,17 @@
+
+
+
+ net6.0
+ enable
+
+ false
+
+
+
+
+
+
+
+
+
+
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WebApi1/Program.cs b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WebApi1/Program.cs
new file mode 100644
index 00000000..7117aed3
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WebApi1/Program.cs
@@ -0,0 +1,43 @@
+var builder = WebApplication.CreateBuilder(args);
+
+// Add services to the container.
+// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
+builder.Services.AddEndpointsApiExplorer();
+builder.Services.AddSwaggerGen();
+
+var app = builder.Build();
+
+// Configure the HTTP request pipeline.
+if (app.Environment.IsDevelopment())
+{
+ app.UseSwagger();
+ app.UseSwaggerUI();
+}
+
+app.UseHttpsRedirection();
+
+var summaries = new[]
+{
+ "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
+};
+
+app.MapGet("/weatherforecast", () =>
+{
+ var forecast = Enumerable.Range(1, 5).Select(index =>
+ new WeatherForecast
+ (
+ DateTime.Now.AddDays(index),
+ Random.Shared.Next(-20, 55),
+ summaries[Random.Shared.Next(summaries.Length)]
+ ))
+ .ToArray();
+ return forecast;
+})
+.WithName("GetWeatherForecast");
+
+app.Run();
+
+internal record WeatherForecast(DateTime Date, int TemperatureC, string? Summary)
+{
+ public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
+}
\ No newline at end of file
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WebApi1/WebApi1.csproj b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WebApi1/WebApi1.csproj
new file mode 100644
index 00000000..08649858
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WebApi1/WebApi1.csproj
@@ -0,0 +1,17 @@
+
+
+
+ net6.0
+ enable
+ enable
+ 2d7c9264-23ba-4fde-9177-64c2984cb10c
+ Linux
+ .
+
+
+
+
+
+
+
+
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WebApplication1/Program.cs b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WebApplication1/Program.cs
new file mode 100644
index 00000000..bc275e4e
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WebApplication1/Program.cs
@@ -0,0 +1,25 @@
+var builder = WebApplication.CreateBuilder(args);
+
+// Add services to the container.
+builder.Services.AddRazorPages();
+
+var app = builder.Build();
+
+// Configure the HTTP request pipeline.
+if (!app.Environment.IsDevelopment())
+{
+ app.UseExceptionHandler("/Error");
+ // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
+ app.UseHsts();
+}
+
+app.UseHttpsRedirection();
+app.UseStaticFiles();
+
+app.UseRouting();
+
+app.UseAuthorization();
+
+app.MapRazorPages();
+
+app.Run();
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WebApplication1/WebApplication1.csproj b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WebApplication1/WebApplication1.csproj
new file mode 100644
index 00000000..c78c9c7e
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WebApplication1/WebApplication1.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net6.0
+ enable
+ enable
+
+
+
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WebApplication2/Program.cs b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WebApplication2/Program.cs
new file mode 100644
index 00000000..bc275e4e
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WebApplication2/Program.cs
@@ -0,0 +1,25 @@
+var builder = WebApplication.CreateBuilder(args);
+
+// Add services to the container.
+builder.Services.AddRazorPages();
+
+var app = builder.Build();
+
+// Configure the HTTP request pipeline.
+if (!app.Environment.IsDevelopment())
+{
+ app.UseExceptionHandler("/Error");
+ // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
+ app.UseHsts();
+}
+
+app.UseHttpsRedirection();
+app.UseStaticFiles();
+
+app.UseRouting();
+
+app.UseAuthorization();
+
+app.MapRazorPages();
+
+app.Run();
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WebApplication2/WebApplication2.csproj b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WebApplication2/WebApplication2.csproj
new file mode 100644
index 00000000..c78c9c7e
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WebApplication2/WebApplication2.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net6.0
+ enable
+ enable
+
+
+
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WinFormsApp1/Program.cs b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WinFormsApp1/Program.cs
new file mode 100644
index 00000000..b31f1870
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WinFormsApp1/Program.cs
@@ -0,0 +1,16 @@
+namespace WinFormsApp1;
+
+static class Program
+{
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ // To customize application configuration such as set high DPI settings or default font,
+ // see https://aka.ms/applicationconfiguration.
+ ApplicationConfiguration.Initialize();
+ Application.Run(new Form1());
+ }
+}
\ No newline at end of file
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WinFormsApp1/WinFormsApp1.csproj b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WinFormsApp1/WinFormsApp1.csproj
new file mode 100644
index 00000000..b57c89e6
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WinFormsApp1/WinFormsApp1.csproj
@@ -0,0 +1,11 @@
+
+
+
+ WinExe
+ net6.0-windows
+ enable
+ true
+ enable
+
+
+
\ No newline at end of file
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WindowsFormsControlLibrary1/WindowsFormsControlLibrary1.csproj b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WindowsFormsControlLibrary1/WindowsFormsControlLibrary1.csproj
new file mode 100644
index 00000000..0e82b02e
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WindowsFormsControlLibrary1/WindowsFormsControlLibrary1.csproj
@@ -0,0 +1,62 @@
+
+
+
+
+ Debug
+ AnyCPU
+ 2104588f-55e2-4c37-89fc-56ca52fd52b6
+ Library
+ WindowsFormsControlLibrary1
+ WindowsFormsControlLibrary1
+ v4.8
+ 512
+ true
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ UserControl
+
+
+ UserControl1.cs
+
+
+
+
+
+
+
diff --git a/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WpfApp1/WpfApp1.csproj b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WpfApp1/WpfApp1.csproj
new file mode 100644
index 00000000..e3e33e3b
--- /dev/null
+++ b/test/Atc.DotNet.Tests/XUnitTestDataProjectSampleTypes/WpfApp1/WpfApp1.csproj
@@ -0,0 +1,11 @@
+
+
+
+ WinExe
+ net8.0-windows
+ enable
+ enable
+ true
+
+
+