Skip to content

Commit dce4343

Browse files
rolfbjarneCopilot
andauthored
[msbuild] Fix Content/BundleResource with PublishFolderType not bundled in multi-RID builds. Fixes #25053. (#25065)
In multi-RID (universal) builds, the outer build saves all Content and BundleResource items to processed-items files, and inner builds remove them. However, items with PublishFolderType are not actually processed by CollectBundleResources (it skips them) — they're handled via ResolvedFileToPublish instead. By incorrectly saving them as processed, the inner builds remove them before they can be added to ResolvedFileToPublish, so they never end up in the app bundle. Fix by filtering out items with PublishFolderType when writing the processed-items files. Fixes #25053. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 677fc5b commit dce4343

File tree

5 files changed

+22
-3
lines changed

5 files changed

+22
-3
lines changed

msbuild/Xamarin.Shared/Xamarin.Shared.targets

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -466,9 +466,16 @@ Copyright (C) 2018 Microsoft. All rights reserved.
466466
<Output TaskParameter="BundleResourcesWithLogicalNames" ItemName="_BundleResourceWithLogicalName" />
467467
</CollectBundleResources>
468468

469-
<!-- Write out the list of assets we've processed, so that an inner build in a multi-rid build can skip processing them -->
470-
<WriteItemsToFile Items="@(BundleResource)" Condition="'$(_SaveProcessedItems)' == 'true'" ItemName="BundleResource" File="$(_ProcessedBundleResourcesPath)" Overwrite="true" IncludeMetadata="false" />
471-
<WriteItemsToFile Items="@(Content)" Condition="'$(_SaveProcessedItems)' == 'true'" ItemName="Content" File="$(_ProcessedContentPath)" Overwrite="true" IncludeMetadata="false" />
469+
<!-- Write out the list of assets we've processed, so that an inner build in a multi-rid build can skip processing them.
470+
Items with a PublishFolderType are not actually processed by CollectBundleResources (they go to ResolvedFileToPublish instead),
471+
so don't include them in the list of processed items - inner builds need to see them to add them to ResolvedFileToPublish.
472+
Ref: https://github.com/dotnet/macios/issues/25053 -->
473+
<ItemGroup Condition="'$(_SaveProcessedItems)' == 'true'">
474+
<_BundleResourceToSave Include="@(BundleResource)" Condition="'%(BundleResource.PublishFolderType)' == ''" />
475+
<_ContentToSave Include="@(Content)" Condition="'%(Content.PublishFolderType)' == ''" />
476+
</ItemGroup>
477+
<WriteItemsToFile Items="@(_BundleResourceToSave)" Condition="'$(_SaveProcessedItems)' == 'true'" ItemName="BundleResource" File="$(_ProcessedBundleResourcesPath)" Overwrite="true" IncludeMetadata="false" />
478+
<WriteItemsToFile Items="@(_ContentToSave)" Condition="'$(_SaveProcessedItems)' == 'true'" ItemName="Content" File="$(_ProcessedContentPath)" Overwrite="true" IncludeMetadata="false" />
472479
<ItemGroup>
473480
<FileWrites Include="$(_ProcessedBundleResourcesPath)" />
474481
<FileWrites Include="$(_ProcessedContentPath)" />
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
BundleResourceJ
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ContentJ

tests/dotnet/BundleStructure/shared.csproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,10 @@
218218
<Content Include="../ContentH.txt">
219219
<PublishFolderType>None</PublishFolderType>
220220
</Content>
221+
<!-- Content with PublishFolderType=Resource: bundled (https://github.com/dotnet/macios/issues/25053) -->
222+
<Content Include="../ContentJ.txt">
223+
<PublishFolderType>Resource</PublishFolderType>
224+
</Content>
221225

222226
<!-- EmbeddedResource items -->
223227

@@ -288,6 +292,10 @@
288292
<BundleResource Include="../BundleResourceH.txt">
289293
<PublishFolderType>None</PublishFolderType>
290294
</BundleResource>
295+
<!-- BundleResource with PublishFolderType=Resource: bundled (https://github.com/dotnet/macios/issues/25053) -->
296+
<BundleResource Include="../BundleResourceJ.txt">
297+
<PublishFolderType>Resource</PublishFolderType>
298+
</BundleResource>
291299

292300
<None Remove="@(Content)" />
293301
<None Remove="@(EmbeddedResource)" />

tests/dotnet/UnitTests/BundleStructureTest.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@ internal static void CheckAppBundleContents (ApplePlatform platform, IEnumerable
257257
expectedFiles.Add (Path.Combine (resourcesDirectory, "ContentD.txt"));
258258
expectedFiles.Add (Path.Combine (resourcesDirectory, "ContentE.txt"));
259259
expectedFiles.Add (Path.Combine (resourcesDirectory, "ContentI.txt"));
260+
expectedFiles.Add (Path.Combine (resourcesDirectory, "ContentJ.txt"));
260261

261262
// expectedFiles.Add (Path.Combine (resourcesDirectory, "EmbeddedResourceA.txt"));
262263
expectedFiles.Add (Path.Combine (resourcesDirectory, "EmbeddedResourceB.txt"));
@@ -270,6 +271,7 @@ internal static void CheckAppBundleContents (ApplePlatform platform, IEnumerable
270271
expectedFiles.Add (Path.Combine (resourcesDirectory, "BundleResourceD.txt"));
271272
expectedFiles.Add (Path.Combine (resourcesDirectory, "BundleResourceE.txt"));
272273
expectedFiles.Add (Path.Combine (resourcesDirectory, "BundleResourceI.txt"));
274+
expectedFiles.Add (Path.Combine (resourcesDirectory, "BundleResourceJ.txt"));
273275

274276
expectedFiles.Add (Path.Combine (resourcesDirectory, "AutoIncluded.txt"));
275277
expectedFiles.Add (Path.Combine (resourcesDirectory, "SubDirectory"));

0 commit comments

Comments
 (0)