[msbuild-quality] MSBuild defaults and incremental resource tracking regressions
Maintainer thường phản hồi trong vòng 2 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 68/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- fsharp
- Lĩnh vực
- build-system
Hướng nghiên cứu
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.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
🔧 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 · ◷
- Ngôn ngữ chính
- F#
- Star
- 4.3k
- Fork
- 884
- Merge trung bình
- 2 ngày 11 giờ
- Pull request đã merge (30 ngày)
- 73
Chuẩn bị môi trường
Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của dotnet/fsharp
-
Needs-Triage
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 95/100
Maintainer thường phản hồi trong vòng 2 ngày
-
Semantic classification cache for opened documents is never populated (written to the unopened-documents cache)Có thể đã có người làm @xperiandri đã nhận 69 ngày trước. Đang mởNeeds-Triage
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
Maintainer thường phản hồi trong vòng 2 ngày
-
Needs-Triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
dotnet/fsharp#20265 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Bug Needs-Triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 2 ngày
-
Needs-Triage
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 45/100
Maintainer thường phản hồi trong vòng 2 ngày
Tất cả issue của dotnet/fsharp
Issue tương tự
-
dependencies good first issue severity: low
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
TMHSDigital/GH-Arcade#27 ·
-
documentation good first issue
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 82/100
SO4-Markets/so4-oracle#1438 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
tech debt
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 83/100
AbsaOSS/living-doc-toolkit#116 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
Maintainer thường phản hồi trong vòng 3 ngày
-
security
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 75/100
Maintainer thường phản hồi trong vòng 1 ngày