Skip to content

Commit 0bd32a8

Browse files
Restore "[One .NET] fix GetAndroidDependencies target with --no-restore"
Context: a21d1a7 This reverts commit a84eccb. I've noticed the following sometimes happens when a new .NET MAUI project is created in VS 2022 on Windows: dotnet\sdk\6.0.200-preview.22055.18\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(267,5): error NETSDK1004: Assets file 'obj\project.assets.json' not found. Run a NuGet package restore to generate this file. I seem to only get this for MAUI projects and only *sometimes*. `dotnet new android` projects seem to always work fine. When this error occurs, I think the dropdown fails to load the device list. What you end up with is the play button that just says `> Android Emulator`. After some amount of "fiddling", you can get the IDE to load the device list. What I think is happening is: 1. NuGet restore takes longer in MAUI projects than `dotnet new android` 2. Sometimes `GetAndroidDependencies` runs *before* NuGet restore, and that triggers the above error. I could validate this hypothesis with: > dotnet new android > dotnet build -t:GetAndroidDependencies --no-restore And I get the above error! I could also reproduce in a test.
1 parent 209d846 commit 0bd32a8

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,5 +333,18 @@ public abstract class Foo<TVirtualView, TNativeView> : ViewHandler<TVirtualView,
333333
builder.AssertHasNoWarnings ();
334334
}
335335
}
336+
337+
[Test]
338+
public void GetAndroidDependencies()
339+
{
340+
var proj = new XamarinAndroidApplicationProject ();
341+
using var builder = CreateApkBuilder ();
342+
builder.Save (proj);
343+
344+
var dotnet = new DotNetCLI (Path.Combine (Root, builder.ProjectDirectory, proj.ProjectFilePath));
345+
346+
// `dotnet build -t:GetAndroidDependencies --no-restore` should succeed
347+
Assert.IsTrue (dotnet.Build (target: "GetAndroidDependencies", norestore: true), $"{proj.ProjectName} should succeed");
348+
}
336349
}
337350
}

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetCLI.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,11 @@ public bool Restore (string target = null, string runtimeIdentifier = null, stri
9393
return Execute (arguments.ToArray ());
9494
}
9595

96-
public bool Build (string target = null, string runtimeIdentifier = null, string [] parameters = null)
96+
public bool Build (string target = null, string runtimeIdentifier = null, string [] parameters = null, bool norestore = false)
9797
{
9898
var arguments = GetDefaultCommandLineArgs ("build", target, runtimeIdentifier, parameters);
99+
if (norestore)
100+
arguments.Add ("--no-restore");
99101
return Execute (arguments.ToArray ());
100102
}
101103

src/Xamarin.Android.Build.Tasks/Xamarin.Android.Tooling.targets

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ projects.
4141
</Target>
4242

4343
<PropertyGroup>
44-
<_ResolveSdksDependsOnTargets>ResolveTargetingPackAssets</_ResolveSdksDependsOnTargets>
44+
<_ResolveSdksDependsOnTargets>ProcessFrameworkReferences</_ResolveSdksDependsOnTargets>
4545
</PropertyGroup>
4646

4747
<Target Name="_ResolveSdks" DependsOnTargets="$(_ResolveSdksDependsOnTargets)">

0 commit comments

Comments
 (0)