2024-09-22 17:31:24 -07:00
<Project>
<PropertyGroup>
2024-10-07 21:41:26 -07:00
<LangVersion> preview</LangVersion>
2026-02-28 14:14:35 -08:00
<NoWarn> $(NoWarn);NU1903;NU5104</NoWarn>
2024-09-22 17:31:24 -07:00
<ImplicitUsings> enable</ImplicitUsings>
<Nullable> enable</Nullable>
<Deterministic> true</Deterministic>
2024-10-07 21:41:26 -07:00
<NeutralLanguage> en-US</NeutralLanguage>
2024-09-22 17:31:24 -07:00
<AppendTargetFrameworkToOutputPath> false</AppendTargetFrameworkToOutputPath>
<DisableImplicitNamespaceImports> true</DisableImplicitNamespaceImports>
<PlatformTarget> AnyCPU</PlatformTarget>
2024-10-27 16:11:08 -07:00
<AllowUnsafeBlocks> True</AllowUnsafeBlocks>
2024-09-22 17:31:24 -07:00
<OutputPath> bin\$(Configuration)\</OutputPath>
2026-01-18 19:02:03 -08:00
<BaseIntermediateOutputPath> obj\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
2024-09-24 16:41:26 -07:00
<ProduceReferenceAssembly> False</ProduceReferenceAssembly>
2024-09-22 17:31:24 -07:00
<DebugType> full</DebugType>
<PublishRepositoryUrl> true</PublishRepositoryUrl>
<EmbedUntrackedSources> true</EmbedUntrackedSources>
2026-01-21 23:40:28 -08:00
<IncludeSymbols> false</IncludeSymbols>
2024-09-22 18:06:43 -07:00
<IsLocalBuild Condition= "'$(GITHUB_ACTIONS)' == ''" > true</IsLocalBuild>
2026-01-21 23:05:38 -06:00
2026-01-18 19:02:03 -08:00
<!-- AOT and Trim compatibility analyzers (build-time validation) -->
<IsAotCompatible> true</IsAotCompatible>
<EnableTrimAnalyzer> true</EnableTrimAnalyzer>
</PropertyGroup>
<PropertyGroup>
<EnableNETAnalyzers> true</EnableNETAnalyzers>
<EnforceCodeStyleInBuild> true</EnforceCodeStyleInBuild>
<TreatWarningsAsErrors Condition= "'$(Configuration)' == 'Release'" > true</TreatWarningsAsErrors>
2024-10-05 19:36:01 -07:00
</PropertyGroup>
2026-01-18 19:02:03 -08:00
<!-- SARIF 2.1 output for Roslyn analyzers - all projects -->
<PropertyGroup>
2026-01-21 23:05:38 -06:00
<!-- Use forward slashes for cross-platform compatibility (works on Windows, Linux, macOS) -->
2026-02-07 12:47:13 -08:00
<SarifOutputDir> $([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), 'QuanTAlib.slnx'))/.sarif</SarifOutputDir>
2026-01-21 23:05:38 -06:00
<ErrorLog> $(SarifOutputDir)/$(MSBuildProjectName).sarif,version=2.1</ErrorLog>
2026-01-18 19:02:03 -08:00
</PropertyGroup>
<Target Name= "CreateSarifDir" BeforeTargets= "CoreCompile" >
2026-01-21 23:05:38 -06:00
<MakeDir Directories= "$(SarifOutputDir)" />
<Message Importance= "High" Text= "SARIF output directory: $(SarifOutputDir)" />
<Message Importance= "High" Text= "SARIF file: $(ErrorLog)" />
2026-01-18 19:02:03 -08:00
</Target>
2024-10-05 19:36:01 -07:00
<PropertyGroup Condition= "'$(Configuration)' == 'Release'" >
<Optimize> true</Optimize>
2026-01-18 19:02:03 -08:00
<DebugType> portable</DebugType>
2024-11-04 07:21:19 -08:00
<DebugSymbols> true</DebugSymbols>
2024-10-05 19:36:01 -07:00
<Deterministic> true</Deterministic>
2026-01-21 23:05:38 -06:00
2026-01-18 19:02:03 -08:00
<!-- Trim mode for library compatibility validation -->
<TrimMode> link</TrimMode>
2026-01-21 23:05:38 -06:00
2026-01-18 19:02:03 -08:00
<!-- Runtime feature switches (reduce size when library is trimmed by consumer) -->
2024-10-05 19:36:01 -07:00
<EnableUnsafeBinaryFormatterSerialization> false</EnableUnsafeBinaryFormatterSerialization>
<EnableUnsafeUTF7Encoding> false</EnableUnsafeUTF7Encoding>
<InvariantGlobalization> true</InvariantGlobalization>
2026-01-21 23:05:38 -06:00
2026-01-18 19:02:03 -08:00
<!-- Suppress reflection-based serialization (faster startup, smaller footprint) -->
<JsonSerializerIsReflectionEnabledByDefault> false</JsonSerializerIsReflectionEnabledByDefault>
2024-10-14 08:45:32 -07:00
</PropertyGroup>
2024-11-04 07:21:19 -08:00
<PropertyGroup>
2026-01-18 19:02:03 -08:00
<!-- S3604: "Remove member initializer" - null! is intentional for nullable reference types in Quantower adapters -->
2026-01-19 12:07:54 -08:00
<!-- S107: "Methods should not have too many parameters" - high-performance SIMD methods require multiple parameters for zero-allocation patterns -->
2026-02-16 22:59:36 -08:00
<!-- S1244: "Do not check floating point equality with exact values" - exact-zero div guards and exact-equality tie detection are fundamental patterns in quantitative indicators -->
2026-01-21 23:05:38 -06:00
<!-- MA0007: "Add comma after the last value" - trailing commas not enforced in this codebase -->
2026-02-16 22:59:36 -08:00
<NoWarn> $(NoWarn);S107;S1144;S1244;S1944;S2053;S2245;S2259;S2583;S2589;S3329;S3604;S3655;S3776;S3949;S3966;S4158;S4347;S5773;S6781;MA0007;MA0048;MA0051;MA0076;RCS1123;RCS1159;IDE0007</NoWarn>
2026-01-18 19:02:03 -08:00
</PropertyGroup>
<!-- Code Coverage Configuration (for NDepend integration) -->
<PropertyGroup Condition= "'$(IsTestProject)' == 'true'" >
<CollectCoverage> true</CollectCoverage>
<CoverletOutputFormat> opencover</CoverletOutputFormat>
<CoverletOutput> $(MSBuildProjectDirectory)/TestResults/</CoverletOutput>
<ExcludeByFile> **/*.Designer.cs,**/*.g.cs,**/*.g.i.cs</ExcludeByFile>
<Exclude> [xunit.*]*,[*.Tests]*</Exclude>
2024-09-22 17:31:24 -07:00
</PropertyGroup>
2024-11-04 07:21:19 -08:00
2026-03-01 13:45:24 -08:00
<!-- SonarLint local rule configuration (IDE-only, not committed to git)
The SonarLint VS/VSCode plugin manages .sonarlint/ locally.
SonarAnalyzer.CSharp NuGet provides build-time analysis; suppressions are in <NoWarn> above. -->
<PropertyGroup Condition= "Exists('$(MSBuildThisFileDirectory).sonarlint\csharp.ruleset')" >
2026-01-21 23:05:38 -06:00
<CodeAnalysisRuleSet> $(MSBuildThisFileDirectory).sonarlint\csharp.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
2026-03-01 13:45:24 -08:00
<ItemGroup Condition= "Exists('$(MSBuildThisFileDirectory).sonarlint\CSharp\SonarLint.xml')" >
2026-01-21 23:05:38 -06:00
<AdditionalFiles Include= "$(MSBuildThisFileDirectory).sonarlint\CSharp\SonarLint.xml" >
<Link> Properties\SonarLint.xml</Link>
</AdditionalFiles>
</ItemGroup>
2026-02-21 20:45:38 -08:00
<!-- GitVersion: skip during design-time builds and restore to prevent VS Code/OmniSharp hangs.
GitVersion scans entire git history on every MSBuild evaluation; with 50+ untracked files
and VS Code's C# extension triggering continuous design-time builds, this causes infinite
process accumulation. Only run GitVersion during actual CLI builds. -->
<PropertyGroup Condition= "'$(DesignTimeBuild)' == 'true' OR '$(BuildingProject)' != 'true'" >
<GitVersionSkip> true</GitVersionSkip>
</PropertyGroup>
2024-09-22 17:31:24 -07:00
<ItemGroup>
2026-01-18 19:02:03 -08:00
<PackageReference Include= "Microsoft.SourceLink.GitHub" Version= "8.0.0" PrivateAssets= "All" />
<PackageReference Include= "GitVersion.MsBuild" Version= "6.5.1" >
<PrivateAssets> all</PrivateAssets>
<IncludeAssets> runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include= "Roslynator.Analyzers" Version= "4.12.9" >
<PrivateAssets> all</PrivateAssets>
<IncludeAssets> runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include= "Meziantou.Analyzer" Version= "2.0.267" >
<PrivateAssets> all</PrivateAssets>
<IncludeAssets> runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include= "SonarAnalyzer.CSharp" Version= "10.*" >
<PrivateAssets> all</PrivateAssets>
<IncludeAssets> runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
2024-09-22 17:31:24 -07:00
</ItemGroup>
2026-02-21 20:45:38 -08:00
<!-- Quantower SDK: local deployment path (override with QuantowerRoot env var).
QuantowerPath removed - was dead code running GetDirectories on every MSBuild evaluation. -->
2024-10-26 23:54:55 -07:00
<PropertyGroup Condition= "'$(IsLocalBuild)' == 'true' AND $([MSBuild]::IsOSPlatform('Windows'))" >
2026-01-18 19:02:03 -08:00
<QuantowerRoot Condition= "'$(QuantowerRoot)' == ''" > Z:\Quantower</QuantowerRoot>
2024-09-22 17:31:24 -07:00
</PropertyGroup>
2024-09-24 16:41:26 -07:00
2026-01-19 12:07:54 -08:00
</Project>