msbuild
msbuild copied to clipboard
[Bug]: Satellite assemblies with un-predefined cultures are not copied correctly into depended projects
Issue Description
Satellite assemblies with un-predefined cultures in a project are not copied correctly into the projects that depends on it.
Steps to Reproduce
Assume that yue is not a predefined language in the system.
- Create a project (Project A) with two resources named
Test.resxandTest.yue.resxrespectively. - Add the following metadata into Project A:
<PropertyGroup> <RespectAlreadyAssignedItemCulture>True</RespectAlreadyAssignedItemCulture> </PropertyGroup> <ItemGroup> <EmbeddedResource Update="Test.resx"> <Generator>ResXFileCodeGenerator</Generator> </EmbeddedResource> <EmbeddedResource Update="Test.yue.resx"> <Culture>yue</Culture> <LogicalName>Test.yue.resources</LogicalName> </EmbeddedResource> </ItemGroup> - Create another project (Project B) that has a project reference to Project A.
- Create another project (Project C) that has a project reference to Project B.
- Build the projects.
Expected Behavior
The satellite assembly for the culture yue is correctly copied into Project B and Project C, and also written into their .deps.json.
Actual Behavior
- The satellite assembly for the culture
yueis not copied into Project C at all. - The
.deps.jsonin both Project B and Project C do not include the satellite assembly for the cultureyue.
Analysis
Suspicious related method: ReferenceTable.FindSatellites()
https://github.com/dotnet/msbuild/blob/4bb8d030c8bb0ffd673c031947251155ecaac390/src/Tasks/AssemblyDependency/ReferenceTable.cs#L974
This method cannot find satellite assemblies with unusual cultures because it is still checking the satellite directory name against CultureInfoCache only.
Related issues and PRs:
- #9954 (Fixed by #10026)
Versions & Configurations
MSBuild version: 17.11.2.32701
Switching to another resource workflow as this issue seems to be put aside for now
FYI: https://github.com/dotnet/msbuild/pull/11607