[msbuild-quality] MSBuild defaults and incremental resource tracking regressions
Les mainteneurs répondent en général sous 2 jours
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 68/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Active
- Stack technique
- fsharp
- Domaine
- build-system
Piste de recherche
Start with the four named files: src/FSharp.Build/Microsoft.FSharp.NetSdk.props, eng/Packages.props, FSharpBuild.Directory.Build.targets, and vsintegration/tests/MockTypeProviders/Directory.Build.props. Review the reported lines and surrounding MSBuild evaluation order, item names, and property composition. Done means the four reported regressions are corrected without overwriting consumer settings or inherited suppressions, and the computed versions and resource files are actually consumed.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
🔧 MSBuild File Quality Report — 2026-09-30
Files reviewed: 96
New findings: 🔴 2 errors · 🟡 2 warnings · 🔵 0 suggestions
🔴 Errors
src/FSharp.Build/Microsoft.FSharp.NetSdk.props
- Rule B-1:
ValueTupleImplicitPackageVersionis consumed before its default is assigned, and the later unconditional assignment overwrites consumer/repository choices.- Lines: 87–97
- Current:
<ItemGroup Condition="..."> <PackageReference Include="System.ValueTuple" Version="$(ValueTupleImplicitPackageVersion)" /> </ItemGroup> <PropertyGroup> <ValueTupleImplicitPackageVersion>4.6.2</ValueTupleImplicitPackageVersion> </PropertyGroup> - Impact: For consumer projects targeting .NET Standard/.NET Core below 2.0, the package item is evaluated before the default exists and can receive an empty version. A value supplied by the project is also replaced before the later .NET Framework package item is evaluated.
- Suggested:
<PropertyGroup> <ValueTupleImplicitPackageVersion Condition="'$(ValueTupleImplicitPackageVersion)' == ''">4.6.2</ValueTupleImplicitPackageVersion> </PropertyGroup> <ItemGroup Condition="..."> <PackageReference Include="System.ValueTuple" Version="$(ValueTupleImplicitPackageVersion)" /> </ItemGroup>
eng/Packages.props
- Rule B-1: The three computed central package-version floors are never consumed.
- Lines: 12–17, 111, 116, 118
- Current:
<SystemCollectionsImmutableCentralVersion>...</SystemCollectionsImmutableCentralVersion> <SystemReflectionMetadataCentralVersion>...</SystemReflectionMetadataCentralVersion> <SystemSecurityCryptographyXmlCentralVersion>...</SystemSecurityCryptographyXmlCentralVersion> <PackageVersion Include="System.Collections.Immutable" Version="$(SystemCollectionsImmutableVersion)" /> <PackageVersion Include="System.Reflection.Metadata" Version="$(SystemReflectionMetadataVersion)" /> <PackageVersion Include="System.Security.Cryptography.Xml" Version="$(SystemSecurityCryptographyXmlVersion)" /> - Impact: The documented
10.0.9floor is ineffective, retaining the CPM downgrade/prebuilt-package risk that the surrounding comment says these aliases are intended to prevent. - Suggested:
<PackageVersion Include="System.Collections.Immutable" Version="$(SystemCollectionsImmutableCentralVersion)" /> <PackageVersion Include="System.Reflection.Metadata" Version="$(SystemReflectionMetadataCentralVersion)" /> <PackageVersion Include="System.Security.Cryptography.Xml" Version="$(SystemSecurityCryptographyXmlCentralVersion)" />
🟡 Warnings
FSharpBuild.Directory.Build.targets
- Rule A-3: The incremental resource comparison hashes an undefined item instead of the files collected immediately above it.
- Lines: 131–155
- Current:
<IntermediateResourcesFiles Include="$(IntermediateOutputPath)resources\*.resx" /> ... <GetFileHash Files="@(IntermediateResourceFilesForHash)"> - Impact:
@(IntermediateResourceFilesForHash)is never populated, soIntermediateResourceFilesHashis based on an empty item list and the target cannot correctly determine whether transformed resources changed. - Suggested:
<GetFileHash Files="@(IntermediateResourcesFiles)">
vsintegration/tests/MockTypeProviders/Directory.Build.props
- Rule B-3: The test-specific
NoWarnassignment discards inherited suppressions.- Line: 13
- Current:
<NoWarn>0067;0169;1591</NoWarn> - Suggested:
<NoWarn>$(NoWarn);0067;0169;1591</NoWarn>
🔵 Suggestions
None.
Existing issue #20357 already tracks the
CreateManifestResourceNamesDependsOnoverwrite, missingFileWritesregistration for ILLink substitutions, and stale shim fallback. Those unchanged findings are intentionally not duplicated here.
Files reviewed (no issues found)
.github/skills/fsharp-diagnostics/server/Directory.Build.propsCoordinateXliff.targetsDirectory.Build.propsDirectory.Build.targetsDirectory.Packages.propsFSharp.Profiles.propsFSharpBuild.Directory.Build.propsFSharpTests.Directory.Build.propsFSharpTests.Directory.Build.targetsUseLocalCompiler.Directory.Build.propsUseLocalCompiler.Directory.Build.targetsbuildtools/buildtools.targetsbuildtools/checkpackages/Directory.Build.propsbuildtools/checkpackages/Directory.Build.targetsdocs/fcs-samples/Directory.Build.propseng/Publishing.propseng/Signing.propseng/TargetFrameworks.propseng/Version.Details.propseng/Versions.propseng/common/internal/Directory.Build.propseng/common/native/LocateNativeCompiler.targetseng/common/native/NativeAotSupported.propseng/restore/optimizationData.targetseng/targets/Imports.targetseng/targets/NuGet.targetseng/targets/Settings.propssetup/Directory.Build.propssetup/Swix/Directory.Build.propssetup/Swix/Directory.Build.targetssrc/Compiler/Directory.Build.propssrc/Directory.Build.propssrc/Directory.Build.targetssrc/FSharp.Build/Directory.Build.propssrc/FSharp.Build/Microsoft.FSharp.Core.NetSdk.propssrc/FSharp.Build/Microsoft.FSharp.Overrides.NetSdk.targetssrc/FSharp.Build/Microsoft.Portable.FSharp.Targetssrc/FSharp.Compiler.Interactive.Settings/Directory.Build.propssrc/FSharp.Core/Directory.Build.propssrc/Microsoft.FSharp.Compiler/Directory.Build.propssrc/fsc/Directory.Build.propssrc/fsc/fsc.targetssrc/fsi/Directory.Build.propssrc/fsi/fsi.targetstests/AheadOfTime/Directory.Build.propstests/AheadOfTime/Directory.Build.targetstests/Directory.Build.propstests/Directory.Build.targetstests/EndToEndBuildTests/DesignTimeProviderPackaging/Directory.Build.propstests/EndToEndBuildTests/Directory.Build.propstests/EndToEndBuildTests/Directory.Build.targetstests/FSharp.Build.UnitTests/Directory.Build.propstests/FSharp.Compiler.ComponentTests/Directory.Build.propstests/FSharp.Compiler.Private.Scripting.UnitTests/Directory.Build.propstests/FSharp.Compiler.Service.Tests/Directory.Build.propstests/FSharp.Test.Utilities/Directory.Build.propstests/Resources/Directory.Build.propstests/Resources/Directory.Build.targetstests/benchmarks/Directory.Build.propstests/fsharp/Directory.Build.propstests/fsharp/SDKTests/Directory.Build.propstests/fsharp/SDKTests/Directory.Build.targetstests/fsharp/SDKTests/tests/FSharpCoreVersionTest.propstests/fsharp/SDKTests/tests/FSharpCoreVersionTest.targetstests/fsharp/SDKTests/tests/PackageTest.propstests/fsharp/SDKTests/tests/PackageTest.targetstests/fsharp/SDKTests/tests/ToolsTest.propstests/fsharp/SDKTests/tests/ToolsTest.targetstests/projects/CompilerCompat/Directory.Build.propsvsintegration/Directory.Build.propsvsintegration/Directory.Build.targetsvsintegration/ItemTemplates/Directory.Build.propsvsintegration/ItemTemplates/Directory.Build.targetsvsintegration/ProjectTemplates/Directory.Build.propsvsintegration/ProjectTemplates/Directory.Build.targetsvsintegration/Templates.Directory.Build.propsvsintegration/Templates.Directory.Build.targetsvsintegration/Vsix/Directory.Build.propsvsintegration/Vsix/Directory.Build.targetsvsintegration/Vsix/VisualFSharpFull/VisualFSharp.Core.targetsvsintegration/shims/Microsoft.FSharp.NetSdk.Shim.propsvsintegration/shims/Microsoft.FSharp.NetSdk.Shim.targetsvsintegration/shims/Microsoft.FSharp.Overrides.NetSdk.Shim.targetsvsintegration/shims/Microsoft.FSharp.Shim.targetsvsintegration/shims/Microsoft.Portable.FSharp.Shim.targetsvsintegration/src/Directory.Build.propsvsintegration/tests/Directory.Build.propsvsintegration/tests/Directory.Build.targetsvsintegration/tests/MockTypeProviders/Directory.Build.targets
Review Rules Reference
This review checks against MSBuild canonical patterns for:
- Target authoring: DependsOn chains, Returns vs Outputs, incremental build, FileWrites
- Property patterns: Conditional defaults, quoted conditions, semicolon composition, path normalization
- Item management: Include/Remove/Update, batching, generated file placement
- Extension points: Import guards, CustomBefore/After hooks, cross-platform paths
Generated by MSBuild Quality Review
Generated by F# MSBuild File Quality Review Agent · gpt56 1.8M · ◷
- Langage dominant
- F#
- Étoiles
- 4.3k
- Forks
- 884
- Merge moyen
- 2 j 11 h
- PR mergées (30 j)
- 73
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de dotnet/fsharp
-
Needs-Triage
Difficulté 1/5 Moins d'une heure Accessibilité débutants 95/100
Les mainteneurs répondent en général sous 2 jours
-
Semantic classification cache for opened documents is never populated (written to the unopened-documents cache)Peut-être pris @xperiandri l’a pris il y a 69 jours. OuverteNeeds-Triage
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100
Les mainteneurs répondent en général sous 2 jours
-
Needs-Triage
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
dotnet/fsharp#20265 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours
-
Bug Needs-Triage
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 2 jours
-
Needs-Triage
Difficulté 4/5 3-5 jours Accessibilité débutants 45/100
Les mainteneurs répondent en général sous 2 jours
Toutes les issues de dotnet/fsharp
Issues similaires
-
Upgrade jest 29.x to 30.xOuvertedependencies severity: low
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
TMHSDigital/Static_Chess#39 ·
-
dependencies good first issue severity: low
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
TMHSDigital/GH-Arcade#27 ·
-
web/build-app-wasm.sh fails on stock macOS (BSD sed -i, empty array under set -u in bash 3.2)Ouvertearea:build bug effort:low P7 source:agent
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 1 jour
-
documentation good first issue
Difficulté 1/5 Moins d'une heure Accessibilité débutants 82/100
SO4-Markets/so4-oracle#1438 ·
Les mainteneurs répondent en général sous 1 jour
-
tech debt
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
AbsaOSS/living-doc-toolkit#116 ·
Les mainteneurs répondent en général sous 1 jour