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.resx and Test.yue.resx respectively.
- 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
yue is not copied into Project C at all.
- The
.deps.json in both Project B and Project C do not include the satellite assembly for the culture yue.
Analysis
Suspicious related method: ReferenceTable.FindSatellites()
|
if (CultureInfoCache.IsValidCultureString(cultureName)) |
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:
Versions & Configurations
MSBuild version: 17.11.2.32701
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
yueis not a predefined language in the system.Test.resxandTest.yue.resxrespectively.Expected Behavior
The satellite assembly for the culture
yueis correctly copied into Project B and Project C, and also written into their.deps.json.Actual Behavior
yueis not copied into Project C at all..deps.jsonin both Project B and Project C do not include the satellite assembly for the cultureyue.Analysis
Suspicious related method:
ReferenceTable.FindSatellites()msbuild/src/Tasks/AssemblyDependency/ReferenceTable.cs
Line 974 in 4bb8d03
This method cannot find satellite assemblies with unusual cultures because it is still checking the satellite directory name against
CultureInfoCacheonly.Related issues and PRs:
(Fixed by Update AssignCulture Task to support existing Culture metadata #10026)
Versions & Configurations
MSBuild version: 17.11.2.32701