Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Jan 5, 2026

The documentation stated that SQL project detection relied on MSBuild properties ($(DSP), $(SqlServerVersion)). Modern SDK-based projects declare their SDK in the project file's Sdk attribute, making property-based detection indirect and fragile.

Changes

New DetectSqlProject MSBuild task:

  • Checks project file SDK attribute first for Microsoft.Build.Sql and MSBuild.Sdk.SqlProj
  • Falls back to MSBuild properties for legacy SSDT projects
  • Leverages existing SqlProjectDetector class with proper XML parsing

Updated _EfcptDetectSqlProject target:

  • Uses new task instead of inline property evaluation
  • Removed BeforeClean trigger (detection unnecessary during clean)
  • Registered task via UsingTask declaration

Updated documentation:

  • Clarified SDK attribute detection takes priority over property-based detection

Example

Before (property-only detection):

<PropertyGroup>
  <_EfcptIsSqlProject Condition="'$(SqlServerVersion)' != '' or '$(DSP)' != ''">true</_EfcptIsSqlProject>
</PropertyGroup>

After (SDK-first detection):

<Target Name="_EfcptDetectSqlProject" BeforeTargets="BeforeBuild;BeforeRebuild">
  <DetectSqlProject ProjectPath="$(MSBuildProjectFullPath)" 
                    SqlServerVersion="$(SqlServerVersion)" 
                    DSP="$(DSP)">
    <Output TaskParameter="IsSqlProject" PropertyName="_EfcptIsSqlProject" />
  </DetectSqlProject>
</Target>

Both SDK formats are detected:

  • <Project Sdk="MSBuild.Sdk.SqlProj/3.3.0">
  • <Sdk Name="Microsoft.Build.Sql" Version="2.0.0" />

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • invalid
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/JD.Efcpt.Build/JD.Efcpt.Build/tests/JD.Efcpt.Build.Tests/bin/Debug/net10.0/JD.Efcpt.Build.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/JD.Efcpt.Build/JD.Efcpt.Build/tests/JD.Efcpt.Build.Tests/bin/Debug/net10.0/JD.Efcpt.Build.Tests.deps.json /home/REDACTED/work/JD.Efcpt.Build/JD.Efcpt.Build/tests/JD.Efcpt.Build.Tests/bin/Debug/net10.0/testhost.dll --port 33389 --endpoint 127.0.0.1:033389 --role client --parentprocessid 4526 --telemetryoptedin false (dns block)
    • Triggering command: /usr/share/dotnet/dotnet /usr/share/dotnet/dotnet exec --runtimeconfig /home/REDACTED/work/JD.Efcpt.Build/JD.Efcpt.Build/tests/JD.Efcpt.Build.Tests/bin/Debug/net10.0/JD.Efcpt.Build.Tests.runtimeconfig.json --depsfile /home/REDACTED/work/JD.Efcpt.Build/JD.Efcpt.Build/tests/JD.Efcpt.Build.Tests/bin/Debug/net10.0/JD.Efcpt.Build.Tests.deps.json /home/REDACTED/work/JD.Efcpt.Build/JD.Efcpt.Build/tests/JD.Efcpt.Build.Tests/bin/Debug/net10.0/testhost.dll --port 41845 --endpoint 127.0.0.1:041845 --role client --parentprocessid 11451 --telemetryoptedin false --log-format eacc1a72d25a6053/var/lib/postgresql/data b26/log.json (dns block)
  • www.example.com
    • Triggering command: /opt/oracle/product/21c/dbhomeXE/bin/oracle oracleXE (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) ace/log.json d-dispatcher/offfsync=off 622d�� 6b728eb90c5e6445full_page_writes=off e398e5f38a8fc3be-c e398e5f38a8fc3besynchronous_commit=off e398e5f38a8fc3bebash (dns block)
    • Triggering command: /opt/oracle/product/21c/dbhomeXE/bin/oracle oracleXE (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) json a2b/log.json /usr�� ntime.v2.task/mo/run/containerd/io.containerd.runtime.v2.task/moby/51e1ad50ae6855ebae4b471671583xe_mz02_XE y 025db50685ac056e152a6df3bf00347dce7/log.json 5ebae4b471671583ln --log-format json 445/log.json a2b/�� (dns block)
    • Triggering command: /opt/oracle/product/21c/dbhomeXE/bin/oracle oracleXE (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) 445/log.json es (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

This section details on the original issue you should resolve

<issue_title>[Refactor] SQL Project Detection</issue_title>
<issue_description>The documentation states the following:

Automatic Detection
JD.Efcpt.Build uses MSBuild properties to detect SQL projects:

Microsoft.Build.Sql: Checks for $(DSP) property
MSBuild.Sdk.SqlProj: Checks for $(SqlServerVersion) property

We can simplify by checking the project file Sdk attribute. It'll contain a string referencing the exact SDK. If it's missing entirely, we can detect a legacy SSDT project through msbuild properties, but on SDK-based properties, we can simply check the SDK string.</issue_description>

Comments on the Issue (you are @copilot in this section)


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Copilot AI and others added 4 commits January 5, 2026 01:59
Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Co-authored-by: JerrettDavis <2610199+JerrettDavis@users.noreply.github.com>
Copilot AI changed the title [WIP] Refactor SQL project detection logic Refactor SQL project detection to prioritize SDK attribute over MSBuild properties Jan 5, 2026
Copilot AI requested a review from JerrettDavis January 5, 2026 02:12
@JerrettDavis JerrettDavis changed the title Refactor SQL project detection to prioritize SDK attribute over MSBuild properties refactor: Refactor SQL project detection to prioritize SDK attribute over MSBuild properties Jan 5, 2026
@JerrettDavis JerrettDavis marked this pull request as ready for review January 5, 2026 02:13
@github-actions
Copy link
Contributor

github-actions bot commented Jan 5, 2026

Code Coverage

Summary
  Generated on: 01/05/2026 - 02:26:49
  Coverage date: 01/05/2026 - 02:26:46
  Parser: Cobertura
  Assemblies: 1
  Classes: 81
  Files: 52
  Line coverage: 83.6%
  Covered lines: 3975
  Uncovered lines: 775
  Coverable lines: 4750
  Total lines: 8615
  Branch coverage: 67.6% (1629 of 2408)
  Covered branches: 1629
  Total branches: 2408
  Method coverage: 94% (701 of 745)
  Full method coverage: 81.4% (607 of 745)
  Covered methods: 701
  Fully covered methods: 607
  Total methods: 745

JD.Efcpt.Build.Tasks                                                                                                                                             83.6%
  JD.Efcpt.Build.Tasks.AddSqlFileWarnings                                                                                                                        92.7%
  JD.Efcpt.Build.Tasks.ApplyConfigOverrides                                                                                                                       100%
  JD.Efcpt.Build.Tasks.BuildLog                                                                                                                                  66.6%
  JD.Efcpt.Build.Tasks.Chains.ConnectionStringResolutionChain                                                                                                    90.1%
  JD.Efcpt.Build.Tasks.Chains.ConnectionStringResolutionContext                                                                                                   100%
  JD.Efcpt.Build.Tasks.Chains.DirectoryResolutionChain                                                                                                           91.6%
  JD.Efcpt.Build.Tasks.Chains.DirectoryResolutionContext                                                                                                          100%
  JD.Efcpt.Build.Tasks.Chains.FileResolutionChain                                                                                                                 100%
  JD.Efcpt.Build.Tasks.Chains.FileResolutionContext                                                                                                               100%
  JD.Efcpt.Build.Tasks.Chains.ResourceResolutionChain                                                                                                            93.1%
  JD.Efcpt.Build.Tasks.Chains.ResourceResolutionContext                                                                                                           100%
  JD.Efcpt.Build.Tasks.CheckSdkVersion                                                                                                                           41.1%
  JD.Efcpt.Build.Tasks.ComputeFingerprint                                                                                                                        97.8%
  JD.Efcpt.Build.Tasks.Config.CodeGenerationOverrides                                                                                                             100%
  JD.Efcpt.Build.Tasks.Config.EfcptConfigOverrideApplicator                                                                                                      93.1%
  JD.Efcpt.Build.Tasks.Config.EfcptConfigOverrides                                                                                                                100%
  JD.Efcpt.Build.Tasks.Config.FileLayoutOverrides                                                                                                                 100%
  JD.Efcpt.Build.Tasks.Config.NamesOverrides                                                                                                                      100%
  JD.Efcpt.Build.Tasks.Config.ReplacementsOverrides                                                                                                               100%
  JD.Efcpt.Build.Tasks.Config.TypeMappingsOverrides                                                                                                               100%
  JD.Efcpt.Build.Tasks.ConnectionStrings.AppConfigConnectionStringParser                                                                                          100%
  JD.Efcpt.Build.Tasks.ConnectionStrings.AppSettingsConnectionStringParser                                                                                        100%
  JD.Efcpt.Build.Tasks.ConnectionStrings.ConfigurationFileTypeValidator                                                                                           100%
  JD.Efcpt.Build.Tasks.ConnectionStrings.ConnectionStringResult                                                                                                   100%
  JD.Efcpt.Build.Tasks.DacpacFingerprint                                                                                                                         96.1%
  JD.Efcpt.Build.Tasks.DbContextNameGenerator                                                                                                                    83.4%
  JD.Efcpt.Build.Tasks.Decorators.TaskExecutionContext                                                                                                             50%
  JD.Efcpt.Build.Tasks.Decorators.TaskExecutionDecorator                                                                                                          100%
  JD.Efcpt.Build.Tasks.DetectSqlProject                                                                                                                             0%
  JD.Efcpt.Build.Tasks.EnsureDacpacBuilt                                                                                                                         96.1%
  JD.Efcpt.Build.Tasks.Extensions.DataRowExtensions                                                                                                               100%
  JD.Efcpt.Build.Tasks.Extensions.EnumerableExtensions                                                                                                            100%
  JD.Efcpt.Build.Tasks.Extensions.StringExtensions                                                                                                                100%
  JD.Efcpt.Build.Tasks.FileHash                                                                                                                                   100%
  JD.Efcpt.Build.Tasks.FileSystemHelpers                                                                                                                          100%
  JD.Efcpt.Build.Tasks.MessageLevelHelpers                                                                                                                        100%
  JD.Efcpt.Build.Tasks.ModuleInitializer                                                                                                                          100%
  JD.Efcpt.Build.Tasks.MsBuildPropertyHelpers                                                                                                                     100%
  JD.Efcpt.Build.Tasks.NullBuildLog                                                                                                                              88.8%
  JD.Efcpt.Build.Tasks.PathUtils                                                                                                                                 91.6%
  JD.Efcpt.Build.Tasks.ProcessResult                                                                                                                              100%
  JD.Efcpt.Build.Tasks.ProcessRunner                                                                                                                               90%
  JD.Efcpt.Build.Tasks.QuerySchemaMetadata                                                                                                                       91.3%
  JD.Efcpt.Build.Tasks.RenameGeneratedFiles                                                                                                                       100%
  JD.Efcpt.Build.Tasks.ResolveDbContextName                                                                                                                       100%
  JD.Efcpt.Build.Tasks.ResolveSqlProjAndInputs                                                                                                                   87.9%
  JD.Efcpt.Build.Tasks.RunEfcpt                                                                                                                                  60.6%
  JD.Efcpt.Build.Tasks.RunSqlPackage                                                                                                                             16.3%
  JD.Efcpt.Build.Tasks.Schema.ColumnModel                                                                                                                         100%
  JD.Efcpt.Build.Tasks.Schema.ColumnNameMapping                                                                                                                   100%
  JD.Efcpt.Build.Tasks.Schema.ConstraintModel                                                                                                                     100%
  JD.Efcpt.Build.Tasks.Schema.DatabaseProviderFactory                                                                                                            94.1%
  JD.Efcpt.Build.Tasks.Schema.ForeignKeyColumnModel                                                                                                               100%
  JD.Efcpt.Build.Tasks.Schema.ForeignKeyModel                                                                                                                      90%
  JD.Efcpt.Build.Tasks.Schema.IndexColumnModel                                                                                                                    100%
  JD.Efcpt.Build.Tasks.Schema.IndexModel                                                                                                                         92.8%
  JD.Efcpt.Build.Tasks.Schema.Providers.FirebirdSchemaReader                                                                                                     98.6%
  JD.Efcpt.Build.Tasks.Schema.Providers.MySqlSchemaReader                                                                                                         100%
  JD.Efcpt.Build.Tasks.Schema.Providers.OracleSchemaReader                                                                                                        100%
  JD.Efcpt.Build.Tasks.Schema.Providers.PostgreSqlSchemaReader                                                                                                    100%
  JD.Efcpt.Build.Tasks.Schema.Providers.SqliteSchemaReader                                                                                                        100%
  JD.Efcpt.Build.Tasks.Schema.Providers.SqlServerSchemaReader                                                                                                     100%
  JD.Efcpt.Build.Tasks.Schema.SchemaFingerprinter                                                                                                                 100%
  JD.Efcpt.Build.Tasks.Schema.SchemaModel                                                                                                                         100%
  JD.Efcpt.Build.Tasks.Schema.SchemaReaderBase                                                                                                                    100%
  JD.Efcpt.Build.Tasks.Schema.TableModel                                                                                                                         92.8%
  JD.Efcpt.Build.Tasks.SerializeConfigProperties                                                                                                                  100%
  JD.Efcpt.Build.Tasks.SqlProjectDetector                                                                                                                        93.3%
  JD.Efcpt.Build.Tasks.StageEfcptInputs                                                                                                                          95.7%
  JD.Efcpt.Build.Tasks.Strategies.CommandNormalizationStrategy                                                                                                   94.1%
  JD.Efcpt.Build.Tasks.Strategies.ProcessCommand                                                                                                                  100%
  JD.Efcpt.Build.Tasks.Utilities.DotNetToolUtilities                                                                                                             66.6%
  System.Text.RegularExpressions.Generated                                                                                                                       80.3%
  System.Text.RegularExpressions.Generated.<RegexGenerator_g>F9F9425F6F5E055E5C6489D8E6FA46DE135B3C69D9A15B4CBA235D8D2417FD2EC__AssemblySymbolsMetadataRegex_1   86.2%
  System.Text.RegularExpressions.Generated.<RegexGenerator_g>F9F9425F6F5E055E5C6489D8E6FA46DE135B3C69D9A15B4CBA235D8D2417FD2EC__DatabaseKeywordRegex_4           75.7%
  System.Text.RegularExpressions.Generated.<RegexGenerator_g>F9F9425F6F5E055E5C6489D8E6FA46DE135B3C69D9A15B4CBA235D8D2417FD2EC__DataSourceKeywordRegex_6         72.3%
  System.Text.RegularExpressions.Generated.<RegexGenerator_g>F9F9425F6F5E055E5C6489D8E6FA46DE135B3C69D9A15B4CBA235D8D2417FD2EC__FileNameMetadataRegex_0          86.2%
  System.Text.RegularExpressions.Generated.<RegexGenerator_g>F9F9425F6F5E055E5C6489D8E6FA46DE135B3C69D9A15B4CBA235D8D2417FD2EC__InitialCatalogKeywordRegex_5     71.2%
  System.Text.RegularExpressions.Generated.<RegexGenerator_g>F9F9425F6F5E055E5C6489D8E6FA46DE135B3C69D9A15B4CBA235D8D2417FD2EC__NonLetterRegex_2                  100%
  System.Text.RegularExpressions.Generated.<RegexGenerator_g>F9F9425F6F5E055E5C6489D8E6FA46DE135B3C69D9A15B4CBA235D8D2417FD2EC__SolutionProjectLineRegex_7       82.5%
  System.Text.RegularExpressions.Generated.<RegexGenerator_g>F9F9425F6F5E055E5C6489D8E6FA46DE135B3C69D9A15B4CBA235D8D2417FD2EC__TrailingDigitsRegex_3            95.2%

@codecov-commenter
Copy link

Codecov Report

❌ Patch coverage is 17.39130% with 19 lines in your changes missing coverage. Please review.
✅ Project coverage is 87.01%. Comparing base (75b05b9) to head (ed2100b).

Files with missing lines Patch % Lines
src/JD.Efcpt.Build.Tasks/DetectSqlProject.cs 17.39% 19 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main      #58      +/-   ##
==========================================
+ Coverage   79.94%   87.01%   +7.07%     
==========================================
  Files          50       51       +1     
  Lines        3350     3373      +23     
  Branches      455      459       +4     
==========================================
+ Hits         2678     2935     +257     
+ Misses        487      438      -49     
+ Partials      185        0     -185     
Flag Coverage Δ
unittests 87.01% <17.39%> (+7.07%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@JerrettDavis JerrettDavis merged commit ec3f185 into main Jan 5, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Refactor] SQL Project Detection

3 participants