Skip to content

[Bug]: Satellite assemblies with un-predefined cultures are not copied correctly into depended projects #10536

@PopSlime

Description

@PopSlime

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.

  1. Create a project (Project A) with two resources named Test.resx and Test.yue.resx respectively.
  2. 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>
  3. Create another project (Project B) that has a project reference to Project A.
  4. Create another project (Project C) that has a project reference to Project B.
  5. 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

Metadata

Metadata

Assignees

Type

No fields configured for Bug.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions