using MsbuildAnalyzer.Models; namespace MsbuildAnalyzer.Utilities; /// /// Builds Nx target configurations for .NET projects. /// public static partial class TargetBuilder { /// /// Builds all applicable targets for a .NET project. /// public static Dictionary BuildTargets( string projectName, string fileName, bool isTest, bool isExe, List packageRefs, Dictionary properties, string projectDirectory, string workspaceRoot, PluginOptions options, NxJsonConfig? nxJson, List directoryBuildInputs) { var targets = new Dictionary(); // Determine the appropriate input for production builds var productionInput = GetProductionInput(nxJson); AddBuildTarget(targets, projectName, fileName, isTest, properties, projectDirectory, workspaceRoot, options, productionInput, directoryBuildInputs); AddBuildReleaseTarget(targets, projectName, fileName, isTest, properties, projectDirectory, workspaceRoot, options, productionInput, directoryBuildInputs); if (isTest) { AddTestTarget(targets, projectName, fileName, packageRefs, properties, projectDirectory, workspaceRoot, options, productionInput, directoryBuildInputs); } // restore/clean/watch/run intentionally omit Directory.* inputs — they don't declare an // Inputs array, and adding one here would narrow Nx's default-input fallback should a // user enable caching on them later. AddRestoreTarget(targets, fileName, options); AddCleanTarget(targets, fileName, isTest, options); AddWatchTarget(targets, fileName, options); if (isExe) { AddPublishTarget(targets, projectName, fileName, isTest, properties, projectDirectory, workspaceRoot, options, productionInput, directoryBuildInputs); AddRunTarget(targets, fileName, options); } if (!isExe && !isTest) { AddPackTarget(targets, projectName, fileName, properties, projectDirectory, workspaceRoot, options, productionInput, directoryBuildInputs); } return targets; } /// /// Determines the appropriate input for production builds. /// Returns "production" if it exists in nx.json's namedInputs, otherwise "default". /// private static string GetProductionInput(NxJsonConfig? nxJson) { if (nxJson?.NamedInputs != null && nxJson.NamedInputs.ContainsKey("production")) { return "production"; } return "default"; } }