Skip to content

Conversation

@jonpryor
Copy link
Contributor

Java.Interop.dll is already a .NET Standard 2.0 library, which is
already compatible with .NETCoreApp,Version=3.1. Why does it need to
be built against netcoreapp3.1 framework?

Consistent Assembly References.

Java.Interop.dll was originally a PCL, and before it became a
.NET Standard 2.0 library in commit 85be94f, we added support to
build Java.Interop.dll as a MonoAndroid-profile assembly in commit
893562c, as doing so reduced the assemblies referenced from the PCL
version from 15 assemblies (System.Runtime, System.Collections, …)
down to 3 assemblies: mscorlib, System, System.Core. Reducing
the number of assemblies referenced improved build and deploy times.

In the .NET Standard 2.0 world order, Java.Interop.dll now has one
assembly reference: netstandard.

However, within Xamarin.Android, netstandard.dll has 16 assembly
references (as of mono/2020-02), which might matter, but very likely
doesn't matter that much, as any large app will probably be pulling
in .NET Standard libraries anyway.

Why add netcoreapp3.1 support to Java.Interop.csproj? While it's
not strictly needed, it does increase consistency, replacing the
netstandard assembly reference with "real" references which will be
consistent with the equivalent Mono.Android.dll.

To build Java.Interop.dll for netcoreapp3.1, also begin building
jnienv-gen for netcoreapp3.1, and add the appropriate build system
voodoo so that it can be executed.

@jonpryor jonpryor force-pushed the jonp-ji-netcoreapp-build branch 2 times, most recently from 1a30975 to 453cf0f Compare March 26, 2020 21:26
`Java.Interop.dll` is already a .NET Standard 2.0 library, which is
already compatible with .NETCoreApp,Version=3.1.  Why does it need to
be built against `netcoreapp3.1` framework?

Consistent Assembly References.

`Java.Interop.dll` was originally a PCL, and before it became a
.NET Standard 2.0 library in commit 85be94f, we added support to
build `Java.Interop.dll` as a `MonoAndroid`-profile assembly in commit
893562c, as doing so reduced the assemblies referenced from the PCL
version from 15 assemblies (`System.Runtime`, `System.Collections`, …)
down to *3* assemblies: `mscorlib`, `System`, `System.Core`.  Reducing
the number of assemblies referenced improved build and deploy times.

In the .NET Standard 2.0 world order, `Java.Interop.dll` now has *one*
assembly reference: `netstandard`.

However, within Xamarin.Android, `netstandard.dll` has 16 assembly
references (as of mono/2020-02), which *might* matter, but very likely
doesn't matter *that* much, as any large app will probably be pulling
in .NET Standard libraries anyway.

Why add `netcoreapp3.1` support to `Java.Interop.csproj`?  While it's
not strictly *needed*, it does increase consistency, replacing the
`netstandard` assembly reference with "real" references which will be
consistent with the [equivalent `Mono.Android.dll`][0].

To build `Java.Interop.dll` for `netcoreapp3.1`, also begin building
`jnienv-gen` for netcoreapp3.1, and add the appropriate build system
voodoo so that it can be executed.

[0]: dotnet/android@e2854ee
@jonpryor jonpryor force-pushed the jonp-ji-netcoreapp-build branch from 453cf0f to 839ec73 Compare March 27, 2020 19:30
jonpryor added a commit to jonpryor/xamarin-android that referenced this pull request Mar 27, 2020
Context: dotnet#4467
Context: https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=3590265&view=logs&j=96fd57f5-f69e-53c7-3d47-f67e6cf9b93e&t=7b19ceb3-907a-5a0d-b8ed-87e3f7335a58

When trying to integration test dotnet/java-interop#614, the
`make all-tests` job fails:

	/usr/local/share/dotnet/sdk/2.2.402/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets(137,5):
	error NETSDK1045: The current .NET SDK does not support targeting .NET Core 3.1.  Either target .NET Core 2.2 or lower, or use a version of the .NET SDK that supports .NET Core 3.1.
	[/Users/builder/azdo/_work/2/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop.csproj]

Particularly odd about this is that we have an explicit job to install
.NET Core 3.1.100, so why is .NET Core 2.2.402 being used at all?!

Turns Out™ that while .NET Core 3.1.100 was installed, it was
installed *into a different prefix*; from the
`install .NET Core 3.1.100` job:

	##[debug]set DOTNET_ROOT=/Users/builder/azdo/_work/_tool/dotnet

and from the `make jenkins` job output:

	DOTNET_ROOT = /Users/builder/azdo/_work/_tool/dotnet

Thus, the `install .NET Core 3.1.100` job is installing .NET Core into
`$HOME/azdo/_work/_tool/_dotnet`, while `make all-tests` is only
looking for .NET Core SDKs within `/usr/local/share/dotnet`, which
does *not* contain .NET Core 3.1 at all.

Where does the `make all-tests` path come from?  It comes from
`tools/xabuild`, which sets the `MSBuildSDKsPath` environment
variable, and `xabuild` did not check `$DOTNET_ROOT`.

Update `xabuild` so that `$DOTNET_ROOT` is also probed for .NET Core
installation directories, and use the *latest* .NET Core SDK path
found between `$DOTNET_ROOT` and `/usr/local/share/dotnet`.
jonpryor added a commit to jonpryor/xamarin-android that referenced this pull request Mar 27, 2020
Context: dotnet#4467
Context: https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=3590265&view=logs&j=96fd57f5-f69e-53c7-3d47-f67e6cf9b93e&t=7b19ceb3-907a-5a0d-b8ed-87e3f7335a58

When trying to integration test dotnet/java-interop#614, the
`make all-tests` job fails:

	/usr/local/share/dotnet/sdk/2.2.402/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets(137,5):
	error NETSDK1045: The current .NET SDK does not support targeting .NET Core 3.1.  Either target .NET Core 2.2 or lower, or use a version of the .NET SDK that supports .NET Core 3.1.
	[/Users/builder/azdo/_work/2/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop.csproj]

Particularly odd about this is that we have an explicit job to install
.NET Core 3.1.100, so why is .NET Core 2.2.402 being used at all?!

Turns Out™ that while .NET Core 3.1.100 was installed, it was
installed *into a different prefix*; from the
`install .NET Core 3.1.100` job:

	##[debug]set DOTNET_ROOT=/Users/builder/azdo/_work/_tool/dotnet

and from the `make jenkins` job output:

	DOTNET_ROOT = /Users/builder/azdo/_work/_tool/dotnet

Thus, the `install .NET Core 3.1.100` job is installing .NET Core into
`$HOME/azdo/_work/_tool/dotnet`, while `make all-tests` is only
looking for .NET Core SDKs within `/usr/local/share/dotnet`, which
does *not* contain .NET Core 3.1 at all.

Where does the `make all-tests` path come from?  It comes from
`tools/xabuild`, which sets the `MSBuildSDKsPath` environment
variable, and `xabuild` did not check `$DOTNET_ROOT`.

Update `xabuild` so that `$DOTNET_ROOT` is also probed for .NET Core
installation directories, and use the *latest* .NET Core SDK path
found between `$DOTNET_ROOT` and `/usr/local/share/dotnet`.
jonpryor added a commit to jonpryor/xamarin-android that referenced this pull request Mar 27, 2020
Context: dotnet#4467
Context: https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=3590265&view=logs&j=96fd57f5-f69e-53c7-3d47-f67e6cf9b93e&t=7b19ceb3-907a-5a0d-b8ed-87e3f7335a58

When trying to integration test dotnet/java-interop#614, the
`make all-tests` job fails:

	/usr/local/share/dotnet/sdk/2.2.402/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets(137,5):
	error NETSDK1045: The current .NET SDK does not support targeting .NET Core 3.1.  Either target .NET Core 2.2 or lower, or use a version of the .NET SDK that supports .NET Core 3.1.
	[/Users/builder/azdo/_work/2/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop.csproj]

Particularly odd about this is that we have an explicit job to install
.NET Core 3.1.100, so why is .NET Core 2.2.402 being used at all?!

Turns Out™ that while .NET Core 3.1.100 was installed, it was
installed *into a different prefix*; from the
`install .NET Core 3.1.100` job:

	##[debug]set DOTNET_ROOT=/Users/builder/azdo/_work/_tool/dotnet

and from the `make jenkins` job output:

	DOTNET_ROOT = /Users/builder/azdo/_work/_tool/dotnet

Thus, the `install .NET Core 3.1.100` job is installing .NET Core into
`$HOME/azdo/_work/_tool/dotnet`, while `make all-tests` is only
looking for .NET Core SDKs within `/usr/local/share/dotnet`, which
does *not* contain .NET Core 3.1 at all.

Where does the `make all-tests` path come from?  It comes from
`tools/xabuild`, which sets the `MSBuildSDKsPath` environment
variable, and `xabuild` did not check `$DOTNET_ROOT`.

Update `xabuild` so that `$DOTNET_ROOT` is also probed for .NET Core
installation directories, and use the *latest* .NET Core SDK path
found between `$DOTNET_ROOT` and `/usr/local/share/dotnet`.
jonpryor added a commit to dotnet/android that referenced this pull request Mar 28, 2020
Context: #4467
Context: https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=3590265&view=logs&j=96fd57f5-f69e-53c7-3d47-f67e6cf9b93e&t=7b19ceb3-907a-5a0d-b8ed-87e3f7335a58

When trying to integration test dotnet/java-interop#614, the
`make all-tests` job fails:

	/usr/local/share/dotnet/sdk/2.2.402/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets(137,5):
	error NETSDK1045: The current .NET SDK does not support targeting .NET Core 3.1.  Either target .NET Core 2.2 or lower, or use a version of the .NET SDK that supports .NET Core 3.1.
	[/Users/builder/azdo/_work/2/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop.csproj]

Particularly odd about this is that we have an explicit job to install
.NET Core 3.1.100, so why is .NET Core 2.2.402 being used at all?!

Turns Out™ that while .NET Core 3.1.100 was installed, it was
installed *into a different prefix*; from the
`install .NET Core 3.1.100` job:

	##[debug]set DOTNET_ROOT=/Users/builder/azdo/_work/_tool/dotnet

and from the `make jenkins` job output:

	DOTNET_ROOT = /Users/builder/azdo/_work/_tool/dotnet

Thus, the `install .NET Core 3.1.100` job is installing .NET Core into
`$HOME/azdo/_work/_tool/dotnet`, while `make all-tests` is only
looking for .NET Core SDKs within `/usr/local/share/dotnet`, which
does *not* contain .NET Core 3.1 at all.

Where does the `make all-tests` path come from?  It comes from
`tools/xabuild`, which sets the `MSBuildSDKsPath` environment
variable, and `xabuild` did not check `$DOTNET_ROOT`.

Update `xabuild` so that `$DOTNET_ROOT` is also probed for .NET Core
installation directories, and use the *latest* .NET Core SDK path
found between `$DOTNET_ROOT` and `/usr/local/share/dotnet`.
jonpryor added a commit to dotnet/android that referenced this pull request Mar 30, 2020
Context: #4467
Context: https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=3590265&view=logs&j=96fd57f5-f69e-53c7-3d47-f67e6cf9b93e&t=7b19ceb3-907a-5a0d-b8ed-87e3f7335a58

When trying to integration test dotnet/java-interop#614, the
`make all-tests` job fails:

	/usr/local/share/dotnet/sdk/2.2.402/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets(137,5):
	error NETSDK1045: The current .NET SDK does not support targeting .NET Core 3.1.  Either target .NET Core 2.2 or lower, or use a version of the .NET SDK that supports .NET Core 3.1.
	[/Users/builder/azdo/_work/2/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop.csproj]

Particularly odd about this is that we have an explicit job to install
.NET Core 3.1.100, so why is .NET Core 2.2.402 being used at all?!

Turns Out™ that while .NET Core 3.1.100 was installed, it was
installed *into a different prefix*; from the
`install .NET Core 3.1.100` job:

	##[debug]set DOTNET_ROOT=/Users/builder/azdo/_work/_tool/dotnet

and from the `make jenkins` job output:

	DOTNET_ROOT = /Users/builder/azdo/_work/_tool/dotnet

Thus, the `install .NET Core 3.1.100` job is installing .NET Core into
`$HOME/azdo/_work/_tool/dotnet`, while `make all-tests` is only
looking for .NET Core SDKs within `/usr/local/share/dotnet`, which
does *not* contain .NET Core 3.1 at all.

Where does the `make all-tests` path come from?  It comes from
`tools/xabuild`, which sets the `MSBuildSDKsPath` environment
variable, and `xabuild` did not check `$DOTNET_ROOT`.

Update `xabuild` so that `$DOTNET_ROOT` is also probed for .NET Core
installation directories, and use the *latest* .NET Core SDK path
found between `$DOTNET_ROOT` and `/usr/local/share/dotnet`.
@jonpryor jonpryor merged commit d70e40f into dotnet:master Mar 30, 2020
@jpobst jpobst added this to the d16-7 milestone Apr 10, 2020
@github-actions github-actions bot locked and limited conversation to collaborators Apr 13, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants