Skip to content

Add a solution file for remap-assembly-ref #3248

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 19, 2019

Conversation

grendello
Copy link
Contributor

We've seen the following build error when remap-assembly-ref is built
from within xaprepare by passing its project file to msbuild:

(ValidateSolutionConfiguration target) ->
/Users/vsts/agent/2.153.2/work/1/s/external/mono/external/cecil/Mono.Cecil.sln.metaproj :
 error MSB4126: The specified solution configuration "net_4_0_Debug|Any CPU" is invalid.
 Please specify a valid solution configuration using the Configuration and Platform properties
 (e.g. MSBuild.exe Solution.sln /p:Configuration=Debug /p:Platform="Any CPU") or leave those
 properties blank to use the default solution configuration.
 [/Users/vsts/agent/2.153.2/work/1/s/external/mono/external/cecil/Mono.Cecil.sln]

The reason is that the $(Configuration) property, even though set on the msbuild
command line, is reset somewhere in one of the Cecil projects to the value shown in
the above error message. This happens because properties set on command line when
building a .csproj, instead of an .sln, are not made read-only. Thus, using
a solution file should fix the problem and this is what this commit is adding.

We've seen the following build error when `remap-assembly-ref` is built
from within `xaprepare` by passing its project file to msbuild:

    (ValidateSolutionConfiguration target) ->
    /Users/vsts/agent/2.153.2/work/1/s/external/mono/external/cecil/Mono.Cecil.sln.metaproj :
     error MSB4126: The specified solution configuration "net_4_0_Debug|Any CPU" is invalid.
     Please specify a valid solution configuration using the Configuration and Platform properties
     (e.g. MSBuild.exe Solution.sln /p:Configuration=Debug /p:Platform="Any CPU") or leave those
     properties blank to use the default solution configuration.
     [/Users/vsts/agent/2.153.2/work/1/s/external/mono/external/cecil/Mono.Cecil.sln]

The reason is that the `$(Configuration)` property, even though set on the msbuild
command line, is reset somewhere in one of the Cecil projects to the value shown in
the above error message. This happens because properties set on command line when
building a `.csproj`, instead of an `.sln`, are **not** made read-only. Thus, using
a solution file should fix the problem and this is what this commit is adding.
@grendello grendello requested a review from jonpryor as a code owner June 18, 2019 20:40
@steveisok steveisok mentioned this pull request Jun 19, 2019
@grendello grendello merged commit 6be64a0 into dotnet:master Jun 19, 2019
@grendello grendello deleted the remap-assembly-ref-sln branch June 19, 2019 07:32
radekdoulik added a commit that referenced this pull request Jun 21, 2019
This reverts commit 6be64a0.

Using the solution instead of csproj broke the cecil build. I didn't
traced all the details, but we ended up with compiling
`Mono.Cecil.dll` without any references.
radekdoulik pushed a commit that referenced this pull request Jul 15, 2019
Bump to mono/2019-06 branch and set mono required versions.

[cecil] Fix the cecil build by reverting "Add a solution file for remap-assembly-ref (#3248)"

Using the solution instead of csproj broke the cecil build. I didn't
traced all the details, but we ended up with compiling
`Mono.Cecil.dll` without any references.

Use 7z when downloading Mono Archives 

[xaprepare] Drop llvm32 cross compilers

Mono has just dropped the llvm32 cross compilers because it is now possible to
cross compile to 32-bit using the 64-bit compiler.

Remove requirement for 32-bit llvm runtime in preparation stage.

[tests] Updated Xamarin.Android.Net tests

Update Properties_Invalid test to reflect current implementation

This was testing part of our old HttpClientHandler implementation
introduced here:
mono/mono@f97e03f

The current corefx implementation doesn't throw when `UseProxy` is
false. The documentation doesn't specify such behavior, so I assume it
was specific for our old implementaion.

Context:
https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclienthandler.proxy?view=netframework-4.8
https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclienthandler.useproxy?view=netframework-4.8
https://github.com/mono/corefx/blob/9354dfd8d3cd4af62592bee9d8fe434e5694788a/src/System.Net.Http/src/System/Net/Http/HttpClientHandler.Unix.cs#L242
https://github.com/mono/corefx/blob/9354dfd8d3cd4af62592bee9d8fe434e5694788a/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/SocketsHttpHandler.cs#L75
https://github.com/mono/corefx/blob/9354dfd8d3cd4af62592bee9d8fe434e5694788a/src/System.Net.Http/src/System/Net/Http/CurlHandler/CurlHandler.cs#L234

Remove broken HttpClient test

Context: #3155 (comment)

[linker] Disable linker's UnreachableBodies optimization

Disable it for now til we find out a fix.

Context: #3202

[jnimarshalmethod-gen] Introduce MonoAndroidLibDirectory property

As we have switched to dynamically linker mono recently, we need to have
libmonosgen in dyld path. So we set `DYLD_LIBRARY_PATH` for `mono`
when running `jnimarshalmethod-gen`

[tests] Exclude network tests which hang.

Context: mono/mono#14938
Context: dotnet/macios#6228

[xamarin-android-api-compatibility] API changes

System.IO.Enumeration.FileSystemName and
System.Security.Cryptography.CryptographicOperations classes were
removed from System.xml as they were duplicates of mscorlib ones. They
were removed as part of NS2.1 work in mono.

They were added by mistake and removed later. Because they were
already present in 16.1 and 16.2 respectively, mono team added type
forwarders to `System.dll` to avoid/lessen API breakage.

System.dll now contains:

	.class extern forwarder System.IO.Enumeration.FileSystemName
	{
	  .assembly extern mscorlib
	}
	.class extern forwarder System.Security.Cryptography.CryptographicOperations
	{
	  .assembly extern mscorlib
	}

Context:
mono/mono@ba719ac
#3155 (comment)

3 extension methods extracted from
`System.Threading.Tasks.TaskExtensions` to a new
`System.Threading.Tasks.TaskAsyncEnumerableExtensions` class.

They stay in the same namespace and being extension methods, they
should not break anything.

	public static System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable<T> ConfigureAwait<T> (this System.Collections.Generic.IAsyncEnumerable<T>, bool);
	public static System.Runtime.CompilerServices.ConfiguredAsyncDisposable ConfigureAwait (this System.IAsyncDisposable, bool);
	public static System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable<T> WithCancellation<T> (this System.Collections.Generic.IAsyncEnumerable<T>, System.Threading.CancellationToken);

Context:
dotnet/standard@ebeec50#diff-93ef3714cd10edf17d6d8045cf3406b8
#3155 (comment)
radekdoulik pushed a commit that referenced this pull request Jul 16, 2019
Bump to mono/2019-06 branch and set mono required versions.

[cecil] Fix the cecil build by reverting "Add a solution file for remap-assembly-ref (#3248)"

Using the solution instead of csproj broke the cecil build. I didn't
traced all the details, but we ended up with compiling
`Mono.Cecil.dll` without any references.

Use 7z when downloading Mono Archives

[xaprepare] Drop llvm32 cross compilers

Mono has just dropped the llvm32 cross compilers because it is now possible to
cross compile to 32-bit using the 64-bit compiler.

Remove requirement for 32-bit llvm runtime in preparation stage.

[tests] Updated Xamarin.Android.Net tests

Update Properties_Invalid test to reflect current implementation

This was testing part of our old HttpClientHandler implementation
introduced here:
mono/mono@f97e03f

The current corefx implementation doesn't throw when `UseProxy` is
false. The documentation doesn't specify such behavior, so I assume it
was specific for our old implementaion.

Context:
https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclienthandler.proxy?view=netframework-4.8
https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclienthandler.useproxy?view=netframework-4.8
https://github.com/mono/corefx/blob/9354dfd8d3cd4af62592bee9d8fe434e5694788a/src/System.Net.Http/src/System/Net/Http/HttpClientHandler.Unix.cs#L242
https://github.com/mono/corefx/blob/9354dfd8d3cd4af62592bee9d8fe434e5694788a/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/SocketsHttpHandler.cs#L75
https://github.com/mono/corefx/blob/9354dfd8d3cd4af62592bee9d8fe434e5694788a/src/System.Net.Http/src/System/Net/Http/CurlHandler/CurlHandler.cs#L234

Remove broken HttpClient test

Context: #3155 (comment)

[linker] Disable linker's UnreachableBodies optimization

Disable it for now til we find out a fix.

Context: #3202

[jnimarshalmethod-gen] Introduce MonoAndroidLibDirectory property

As we have switched to dynamically linker mono recently, we need to have
libmonosgen in dyld path. So we set `DYLD_LIBRARY_PATH` for `mono`
when running `jnimarshalmethod-gen`

[tests] Exclude network tests which hang.

Context: mono/mono#14938
Context: dotnet/macios#6228

[xamarin-android-api-compatibility] API changes

System.IO.Enumeration.FileSystemName and
System.Security.Cryptography.CryptographicOperations classes were
removed from System.xml as they were duplicates of mscorlib ones. They
were removed as part of NS2.1 work in mono.

They were added by mistake and removed later. Because they were
already present in 16.1 and 16.2 respectively, mono team added type
forwarders to `System.dll` to avoid/lessen API breakage.

System.dll now contains:

	.class extern forwarder System.IO.Enumeration.FileSystemName
	{
	  .assembly extern mscorlib
	}
	.class extern forwarder System.Security.Cryptography.CryptographicOperations
	{
	  .assembly extern mscorlib
	}

Context:
mono/mono@ba719ac
#3155 (comment)

3 extension methods extracted from
`System.Threading.Tasks.TaskExtensions` to a new
`System.Threading.Tasks.TaskAsyncEnumerableExtensions` class.

They stay in the same namespace and being extension methods, they
should not break anything.

	public static System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable<T> ConfigureAwait<T> (this System.Collections.Generic.IAsyncEnumerable<T>, bool);
	public static System.Runtime.CompilerServices.ConfiguredAsyncDisposable ConfigureAwait (this System.IAsyncDisposable, bool);
	public static System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable<T> WithCancellation<T> (this System.Collections.Generic.IAsyncEnumerable<T>, System.Threading.CancellationToken);

Context:
dotnet/standard@ebeec50#diff-93ef3714cd10edf17d6d8045cf3406b8
#3155 (comment)
@github-actions github-actions bot locked and limited conversation to collaborators Jan 30, 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