[msbuild-quality] MSBuild defaults and incremental resource tracking regressions
Los mantenedores suelen responder en 2 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 68/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- fsharp
- Área
- build-system
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
🔧 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 · ◷
- Lenguaje dominante
- F#
- Estrellas
- 4.3k
- Forks
- 884
- Merge medio
- 2 d 11 h
- PR fusionados (30 d)
- 73
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de dotnet/fsharp
-
Needs-Triage
Dificultad 1/5 Menos de una hora Aptitud para principiantes 95/100
Los mantenedores suelen responder en 2 días
-
Semantic classification cache for opened documents is never populated (written to the unopened-documents cache)Posiblemente ocupada @xperiandri la tomó hace 69 días. AbiertoNeeds-Triage
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
Los mantenedores suelen responder en 2 días
-
Needs-Triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
dotnet/fsharp#20265 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
Bug Needs-Triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 2 días
-
Needs-Triage
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
Los mantenedores suelen responder en 2 días
Todos los issues de dotnet/fsharp
Issues similares
-
dependencies good first issue severity: low
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
TMHSDigital/GH-Arcade#27 ·
-
documentation good first issue
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
SO4-Markets/so4-oracle#1438 ·
Los mantenedores suelen responder en 1 día
-
tech debt
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
AbsaOSS/living-doc-toolkit#116 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 3 días
-
security
Dificultad 1/5 Menos de una hora Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día