Skip to content

Commit 853247a

Browse files
authored
Merge branch 'main' into dev/rolf/builds-cleanup
2 parents 667326e + 5a0d412 commit 853247a

File tree

102 files changed

+625
-1905
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+625
-1905
lines changed

.github/workflows/update-single-platform-branches.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ jobs:
2828
set -ex
2929
git config user.email "[email protected]"
3030
git config user.name "GitHub Actions Single Platform Branch Updater"
31-
for platform in dotnet-iOS dotnet-tvOS dotnet-MacCatalyst dotnet-macOS dotnet; do
31+
for platform in dotnet-iOS dotnet-tvOS dotnet-MacCatalyst dotnet-macOS; do
3232
git checkout -b release-test/only-$platform origin/release-test/only-$platform
3333
git merge origin/main
3434
git push

.gitignore

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,7 @@ tests/bcl-test/SystemCoreXunit*.csproj
3434
tests/bcl-test/SystemXunit.csproj
3535
global.json
3636
.idea
37-
device-tests-provisioning.csx
38-
build-provisioning.csx
39-
provision-xcode.csx
37+
provision-shared.csx
4038
mono_crash.*.json
4139
*.binlog
4240
.vscode

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ else
110110
@echo
111111
endif
112112
endif
113+
$(Q) $(MAKE) -C dotnet shutdown-build-server
113114

114115
.PHONY: package release
115116
package release:

dotnet/Makefile

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -546,4 +546,9 @@ all-hook::
546546
$(Q) $(MAKE) shutdown-build-server
547547

548548
shutdown-build-server:
549-
$(Q) $(DOTNET) build-server shutdown
549+
$(Q) echo "Shutting down build servers:"
550+
$(Q) $(DOTNET) build-server shutdown | sed 's/^/ /' || true
551+
$(Q) echo "Listing .NET processes still alive:"
552+
$(Q) pgrep -lf "^$(DOTNET)" | sed 's/^/ /' || true
553+
$(Q) echo "Killing the above mentioned processes."
554+
$(Q) pkill -9 -f "^$(DOTNET)" | sed 's/^/ /' || true

eng/Version.Details.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,9 @@
8282
<Uri>https://github.com/dotnet/templating</Uri>
8383
<Sha />
8484
</Dependency>
85-
<Dependency Name="Microsoft.DotNet.XHarness.iOS.Shared" Version="10.0.0-prerelease.24467.4">
85+
<Dependency Name="Microsoft.DotNet.XHarness.iOS.Shared" Version="10.0.0-prerelease.24476.1">
8686
<Uri>https://github.com/dotnet/xharness</Uri>
87-
<Sha>3cfb1a3d86da666fb80ba0adb970525e88339d57</Sha>
87+
<Sha>7d5c32dbda0c6c8b9dc20cde4e1261b191896138</Sha>
8888
</Dependency>
8989
</ToolsetDependencies>
9090
</Dependencies>

eng/Versions.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<MicrosoftNETWorkloadEmscriptenCurrentManifest80100TransportVersion>8.0.0-rtm.23511.3</MicrosoftNETWorkloadEmscriptenCurrentManifest80100TransportVersion>
1313
<MicrosoftNETRuntimeMonoTargetsSdkPackageVersion>8.0.0</MicrosoftNETRuntimeMonoTargetsSdkPackageVersion>
1414
<MicrosoftTemplateEngineTasksVersion>7.0.100-alpha.1.21601.1</MicrosoftTemplateEngineTasksVersion>
15-
<MicrosoftDotNetXHarnessiOSSharedPackageVersion>10.0.0-prerelease.24467.4</MicrosoftDotNetXHarnessiOSSharedPackageVersion>
15+
<MicrosoftDotNetXHarnessiOSSharedPackageVersion>10.0.0-prerelease.24476.1</MicrosoftDotNetXHarnessiOSSharedPackageVersion>
1616
<!-- Manually updated versions -->
1717
<Emscriptennet7WorkloadVersion>$(MicrosoftNETWorkloadEmscriptenCurrentManifest80100Version)</Emscriptennet7WorkloadVersion>
1818
<EmscriptenWorkloadVersion>$(MicrosoftNETWorkloadEmscriptenCurrentManifest80100Version)</EmscriptenWorkloadVersion>

mk/xamarin.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ endif
1818

1919
# Available versions can be seen here:
2020
# https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/Microsoft.Tools.Mlaunch/versions
21-
MLAUNCH_NUGET_VERSION=1.0.256
21+
MLAUNCH_NUGET_VERSION=1.0.261
2222

2323
define CheckVersionTemplate
2424
check-$(1)::

msbuild/ILMerge.targets

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
33
<PropertyGroup>
44
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
5-
<MergeSystemAssemblies Condition="'$(MergeSystemAssemblies)' == ''">true</MergeSystemAssemblies>
5+
<MergeSystemAssemblies Condition="'$(MergeSystemAssemblies)' == ''">false</MergeSystemAssemblies>
66
</PropertyGroup>
77

88
<ItemGroup>

msbuild/Xamarin.MacDev.Tasks/Tasks/ComputeCodesignItems.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ public override bool Execute ()
161161
for (var i = 1; i < all.Length; i++) {
162162
var nextMetadata = all [i].CloneCustomMetadataToDictionary ();
163163
if (nextMetadata.Count != firstMetadata.Count) {
164-
Log.LogWarning (MSBStrings.W7095, /* Code signing has been requested multiple times for '{0}', with different metadata. The metadata for one are: '{1}', while the metadata for the other are: '{2}' */ group.Key, string.Join (", ", firstMetadata.Keys), string.Join (", ", nextMetadata.Keys));
164+
Log.LogWarning (MSBStrings.W7095, /* Code signing has been requested multiple times for '{0}', with different metadata. The metadata for one are: '{1}', while the metadata for the other are: '{2}' */ group.Key, string.Join (", ", firstMetadata.Keys.OrderBy (v => v)), string.Join (", ", nextMetadata.Keys.OrderBy (v => v)));
165165
} else {
166166
foreach (var kvp in firstMetadata) {
167167
if (!nextMetadata.TryGetValue (kvp.Key, out var nextValue)) {

msbuild/Xamarin.MacDev.Tasks/Tasks/UnpackLibraryResources.cs

Lines changed: 75 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
using System.IO;
33
using System.Linq;
44
using System.Reflection;
5+
using System.Reflection.Metadata;
6+
using System.Reflection.PortableExecutable;
57
using System.Text;
68
using System.Collections.Generic;
79

@@ -15,7 +17,6 @@
1517

1618
namespace Xamarin.MacDev.Tasks {
1719
public class UnpackLibraryResources : XamarinTask, ITaskCallback, ICancelableTask {
18-
MetadataLoadContext? universe;
1920
List<ITaskItem> unpackedResources = new List<ITaskItem> ();
2021

2122
#region Inputs
@@ -26,9 +27,6 @@ public class UnpackLibraryResources : XamarinTask, ITaskCallback, ICancelableTas
2627
[Required]
2728
public string IntermediateOutputPath { get; set; } = string.Empty;
2829

29-
[Required]
30-
public ITaskItem [] ReferenceAssemblies { get; set; } = Array.Empty<ITaskItem> ();
31-
3230
[Required]
3331
public ITaskItem [] ReferencedLibraries { get; set; } = Array.Empty<ITaskItem> ();
3432

@@ -52,15 +50,6 @@ public class UnpackLibraryResources : XamarinTask, ITaskCallback, ICancelableTas
5250
#endregion
5351

5452
public override bool Execute ()
55-
{
56-
try {
57-
return ExecuteImpl ();
58-
} finally {
59-
universe?.Dispose ();
60-
}
61-
}
62-
63-
bool ExecuteImpl ()
6453
{
6554
if (ShouldExecuteRemotely ()) {
6655
var result = new TaskRunner (SessionId, BuildEngine4).RunAsync (this).Result;
@@ -87,7 +76,7 @@ bool ExecuteImpl ()
8776
Log.LogMessage (MessageImportance.Low, MSBStrings.M0168, asm.ItemSpec);
8877
} else {
8978
var perAssemblyOutputPath = Path.Combine (IntermediateOutputPath, "unpack", asm.GetMetadata ("Filename"));
90-
var extracted = ExtractContentAssembly (asm.ItemSpec, perAssemblyOutputPath).ToArray ();
79+
var extracted = ExtractContentAssembly (asm.ItemSpec, perAssemblyOutputPath);
9180

9281
results.AddRange (extracted);
9382

@@ -113,58 +102,88 @@ bool IsFrameworkAssembly (ITaskItem asm)
113102
return false;
114103
}
115104

116-
IEnumerable<ITaskItem> ExtractContentAssembly (string assembly, string intermediatePath)
105+
List<ITaskItem> ExtractContentAssembly (string assembly, string intermediatePath)
117106
{
107+
var rv = new List<ITaskItem> ();
108+
118109
if (!File.Exists (assembly)) {
119110
Log.LogMessage (MessageImportance.Low, $"Not inspecting assembly because it doesn't exist: {assembly}");
120-
yield break;
111+
return rv;
121112
}
122113

123-
var asmWriteTime = File.GetLastWriteTimeUtc (assembly);
124-
var manifestResources = GetAssemblyManifestResources (assembly).ToArray ();
125-
if (!manifestResources.Any ())
126-
yield break;
127-
128-
Log.LogMessage (MessageImportance.Low, $"Inspecting assembly with {manifestResources.Length} resources: {assembly}");
129-
foreach (var embedded in manifestResources) {
130-
string rpath;
131-
132-
if (embedded.Name.StartsWith ("__" + Prefix + "_content_", StringComparison.Ordinal)) {
133-
var mangled = embedded.Name.Substring (("__" + Prefix + "_content_").Length);
134-
rpath = UnmangleResource (mangled);
135-
} else if (embedded.Name.StartsWith ("__" + Prefix + "_page_", StringComparison.Ordinal)) {
136-
var mangled = embedded.Name.Substring (("__" + Prefix + "_page_").Length);
137-
rpath = UnmangleResource (mangled);
138-
} else {
139-
continue;
140-
}
141-
142-
var path = Path.Combine (intermediatePath, rpath);
143-
var file = new FileInfo (path);
144-
145-
var item = new TaskItem (path);
146-
item.SetMetadata ("LogicalName", rpath);
147-
item.SetMetadata ("Optimize", "false");
148-
149-
if (file.Exists && file.LastWriteTimeUtc >= asmWriteTime) {
150-
Log.LogMessage (" Up to date: {0}", rpath);
151-
} else {
152-
Log.LogMessage (" Unpacking: {0}", rpath);
153-
154-
Directory.CreateDirectory (Path.GetDirectoryName (path));
114+
try {
115+
var asmWriteTime = File.GetLastWriteTimeUtc (assembly);
116+
using var peStream = File.OpenRead (assembly);
117+
using var peReader = new PEReader (peStream);
118+
var metadataReader = PEReaderExtensions.GetMetadataReader (peReader);
119+
Log.LogMessage (MessageImportance.Low, $"Inspecting resources in assembly {assembly}");
120+
foreach (var manifestResourceHandle in metadataReader.ManifestResources) {
121+
var manifestResource = metadataReader.GetManifestResource (manifestResourceHandle);
122+
if (!manifestResource.Implementation.IsNil)
123+
continue; // embedded resources have Implementation.IsNil = true, and those are the ones we care about
124+
125+
var name = metadataReader.GetString (manifestResource.Name);
126+
if (string.IsNullOrEmpty (name))
127+
continue;
128+
129+
string rpath;
130+
131+
if (name.StartsWith ("__" + Prefix + "_content_", StringComparison.Ordinal)) {
132+
var mangled = name.Substring (("__" + Prefix + "_content_").Length);
133+
rpath = UnmangleResource (mangled);
134+
} else if (name.StartsWith ("__" + Prefix + "_page_", StringComparison.Ordinal)) {
135+
var mangled = name.Substring (("__" + Prefix + "_page_").Length);
136+
rpath = UnmangleResource (mangled);
137+
} else {
138+
continue;
139+
}
155140

156-
using (var stream = File.Open (path, FileMode.Create)) {
157-
using (var resource = embedded.Open ())
158-
resource.CopyTo (stream);
141+
var path = Path.Combine (intermediatePath, rpath);
142+
var file = new FileInfo (path);
143+
144+
var item = new TaskItem (path);
145+
item.SetMetadata ("LogicalName", rpath);
146+
item.SetMetadata ("Optimize", "false");
147+
148+
if (file.Exists && file.LastWriteTimeUtc >= asmWriteTime) {
149+
Log.LogMessage (" Up to date: {0}", rpath);
150+
} else {
151+
Log.LogMessage (" Unpacking: {0}", rpath);
152+
153+
Directory.CreateDirectory (Path.GetDirectoryName (path));
154+
155+
var resourceDirectory = peReader.GetSectionData (peReader.PEHeaders.CorHeader!.ResourcesDirectory.RelativeVirtualAddress);
156+
var reader = resourceDirectory.GetReader ((int) manifestResource.Offset, resourceDirectory.Length - (int) manifestResource.Offset);
157+
var length = reader.ReadUInt32 ();
158+
if (length > reader.RemainingBytes)
159+
throw new BadImageFormatException ();
160+
#if NET
161+
using var fs = new FileStream (path, FileMode.Create, FileAccess.Write, FileShare.Read);
162+
unsafe {
163+
var span = new ReadOnlySpan<byte> (reader.CurrentPointer, (int) length);
164+
fs.Write (span);
165+
}
166+
#else
167+
var buffer = new byte [4096];
168+
using var fs = new FileStream (path, FileMode.Create, FileAccess.Write, FileShare.Read, buffer.Length);
169+
var left = (int) length;
170+
while (left > 0) {
171+
var read = Math.Min (left, buffer.Length);
172+
reader.ReadBytes (read, buffer, 0);
173+
fs.Write (buffer, 0, read);
174+
left -= read;
175+
}
176+
#endif
177+
unpackedResources.Add (item);
159178
}
160179

161-
unpackedResources.Add (item);
180+
rv.Add (item);
162181
}
163-
164-
yield return item;
182+
} catch (Exception e) {
183+
Log.LogMessage (MessageImportance.Low, $"Unable to load the resources from the assembly '{assembly}': {e}");
184+
return new List<ITaskItem> ();
165185
}
166-
167-
yield break;
186+
return rv;
168187
}
169188

170189
static string UnmangleResource (string mangled)
@@ -237,27 +256,5 @@ public bool ShouldCopyToBuildServer (ITaskItem item)
237256

238257
public IEnumerable<ITaskItem> GetAdditionalItemsToBeCopied () => ItemsFiles;
239258

240-
IEnumerable<ManifestResource> GetAssemblyManifestResources (string fileName)
241-
{
242-
if (universe is null)
243-
universe = new MetadataLoadContext (new PathAssemblyResolver (ReferenceAssemblies.Select (v => v.ItemSpec)));
244-
245-
Assembly assembly;
246-
try {
247-
assembly = universe.LoadFromAssemblyPath (fileName);
248-
} catch (Exception e) {
249-
Log.LogMessage (MessageImportance.Low, $"Unable to load the assembly '{fileName}: {e}");
250-
yield break;
251-
}
252-
253-
foreach (var resourceName in assembly.GetManifestResourceNames ()) {
254-
if (string.IsNullOrEmpty (resourceName))
255-
continue;
256-
var info = assembly.GetManifestResourceInfo (resourceName);
257-
if (!info.ResourceLocation.HasFlag (ResourceLocation.Embedded))
258-
continue;
259-
yield return new ManifestResource (resourceName, () => assembly.GetManifestResourceStream (resourceName));
260-
}
261-
}
262259
}
263260
}

0 commit comments

Comments
 (0)