[msbuild] Build the MSBuild task assemblies for netstandard2.0. (#7706)

* Bump Xamarin.MacDev.

New commits in xamarin/Xamarin.MacDev:

* xamarin/Xamarin.MacDev@210c664 Adds net451 to Xamarin.MacDev.csproj
* xamarin/Xamarin.MacDev@64db365 [winios] Changes provisioning profiles default path
* xamarin/Xamarin.MacDev@d34430a Switch to short-form projects and build for both net461 and netstandard2.0. (#68)

Diff: 0f578f51e6..210c664e56

* [msbuild] Update to latest Mono.Cecil.

The older version doesn't support netstandard2.0.

No code changes were required.

* [msbuild] Remove unused usings.

* [msbuild] Make ILMerge work when building for netstandard2.0.

Also unify/deduplicate the ILMerge logic between Xamarin.iOS and Xamarin.Mac.

* [msbuild] Build for netstandard2.0 in addition to net461.

* [msbuild] Use custom project configurations to support running the tests for both netstandard2.0 and net461.

Use custom project configurations to support running the tests for when the
tasks assembly is built for netstandard2.0 and net461.

* [tests] Make command-line based 'make test-ios-tasks' run tests for both netstandard2.0 and net461.

* [xharness] Add test configuration to run iOS MSBuild tests using either netstandard2.0 or net461.

* [msbuild] Make the netstandard2.0-buils task assemblies the default.

* [msbuild] ILRepack lib assemblies, not ref assemblies.

Ask MSBuild to copy lib assemblies to the output folder when building for
netstandard2.0, this way we can easily find the actual implementation
libraries to pass to ILRepack.

* [msbuild] Merge System.Text.Encodings.Web.dll as well.

* [xharness] Fix build of MSBuild tests for iOS.
This commit is contained in:
Rolf Bjarne Kvinge 2020-01-16 18:22:48 +01:00 коммит произвёл GitHub
Родитель baf3d117f5
Коммит 54b07b2f2d
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
15 изменённых файлов: 202 добавлений и 94 удалений

2
external/Xamarin.MacDev поставляемый

@ -1 +1 @@
Subproject commit 0f578f51e63b6ff93014782dbc9378e6b6bc6d75
Subproject commit 210c664e56117d3a1a7f6dd002109eb444dbdc17

69
msbuild/ILMerge.targets Normal file
Просмотреть файл

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="ILRepack" Version="2.0.18" />
</ItemGroup>
<Target Name="ILRepack" BeforeTargets="CopyFilesToOutputDirectory" Inputs="@(IntermediateAssembly -&gt; '%(FullPath)')" Outputs="$(IntermediateOutputPath)ilrepack.txt" Returns="@(MergedAssemblies)" Condition="Exists(@(IntermediateAssembly -&gt; '%(FullPath)')) And '$(ILRepack)' != 'false'">
<ItemGroup>
<NetstandardPath Include="@(ReferencePath -&gt; '%(RootDir)%(Directory)')" Condition="'%(FileName)%(Extension)' == 'netstandard.dll'" />
</ItemGroup>
<PropertyGroup>
<NetstandardDirectory>@(NetstandardPath)</NetstandardDirectory>
</PropertyGroup>
<!-- The assemblies are in a very different place when building for netstandard2.0, which means we need different logic to find them too -->
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<!-- I don't like to have a hard-coded list of assemblies to merge, but I couldn't find a way to calculate it -->
<MergedAssemblies Include="@(ReferencePath)" Condition="'%(FileName)' == 'Xamarin.MacDev.Tasks.Core'" />
<MergedAssemblies Include="@(ReferencePath)" Condition="'%(FileName)' == 'Xamarin.MacDev.Tasks'" />
<MergedAssemblies Include="@(ReferencePath)" Condition="'%(FileName)' == '$(AssemblyName).Core'" /> <!-- Use AssemblyName so that the exact same logic works for both Xamarin.iOS.Tasks.dll and Xamarin.Mac.Tasks.dll -->
<MergedAssemblies Include="@(ReferencePath)" Condition="'%(FileName)' == 'Xamarin.MacDev'" />
<MergedAssemblies Include="$(OutputPath)/Microsoft.Bcl.AsyncInterfaces.dll" />
<MergedAssemblies Include="$(OutputPath)/System.Buffers.dll" />
<MergedAssemblies Include="$(OutputPath)/System.Memory.dll" />
<MergedAssemblies Include="$(OutputPath)/System.Numerics.Vectors.dll" />
<MergedAssemblies Include="$(OutputPath)/System.Runtime.CompilerServices.Unsafe.dll" />
<MergedAssemblies Include="$(OutputPath)/System.Text.Json.dll" />
<MergedAssemblies Include="$(OutputPath)/System.Threading.Tasks.Extensions.dll" />
<MergedAssemblies Include="$(OutputPath)/System.Text.Encodings.Web.dll" />
<MergedAssemblies Include="@(ReferencePath)" Condition="'%(FileName)' == 'Mono.Posix.NETStandard'" />
<MergedAssemblies Include="@(ReferencePath)" Condition="'%(Extension)' == '.dll' And $([System.String]::new('%(FileName)').StartsWith('Mono.Cecil', StringComparison.OrdinalIgnoreCase))" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net461'">
<MergedAssemblies Include="@(ReferenceCopyLocalPaths)" Condition="'%(Extension)' == '.dll'
And !$([System.String]::new('%(FileName)').EndsWith('.resources', StringComparison.OrdinalIgnoreCase))
And !$([System.String]::new('%(FileName)').StartsWith('Microsoft.Build.', StringComparison.OrdinalIgnoreCase))
And !$([System.String]::new('%(FullPath)').StartsWith('/Library/Frameworks/Mono.framework', StringComparison.OrdinalIgnoreCase))"
/>
<MergedAssemblies Include="@(ReferencePath)" Condition="'%(Extension)' == '.dll' And $([System.String]::new('%(FileName)').StartsWith('Mono.Cecil', StringComparison.OrdinalIgnoreCase))" />
</ItemGroup>
<ItemGroup>
<ReferenceCopyLocalDirs Include="@(ReferenceCopyLocalPaths -&gt; '%(RootDir)%(Directory)')" />
<ReferenceCopyLocalPaths Remove="@(MergedAssemblies)" />
<LibDir Include="@(ReferenceCopyLocalDirs -&gt; Distinct())" />
</ItemGroup>
<PropertyGroup>
<ILRepackArgs Condition="'$(AssemblyOriginatorKeyFile)' != ''">/keyfile:"$(AssemblyOriginatorKeyFile)"</ILRepackArgs>
<ILRepackArgs>$(ILRepackArgs) @(LibDir -&gt; '/lib:"%(Identity)."', ' ')</ILRepackArgs>
<ILRepackArgs>$(ILRepackArgs) /out:"@(IntermediateAssembly -&gt; '%(FullPath)')"</ILRepackArgs>
<ILRepackArgs>$(ILRepackArgs) "@(IntermediateAssembly -&gt; '%(FullPath)')"</ILRepackArgs>
<ILRepackArgs>$(ILRepackArgs) @(MergedAssemblies -&gt; '"%(FullPath)"', ' ')</ILRepackArgs>
<ILRepackArgs>$(ILRepackArgs) "/lib:$(NetstandardDirectory)"</ILRepackArgs> <!-- This is needed for ilrepack to find netstandard.dll, which is referenced by the System.Text.Json assembly -->
</PropertyGroup>
<Exec Command="&quot;$(ILRepack)&quot; $(ILRepackArgs)" WorkingDirectory="$(MSBuildProjectDirectory)\$(OutputPath)" StandardErrorImportance="high" StandardOutputImportance="low" ConsoleToMSBuild="true" ContinueOnError="true">
<Output TaskParameter="ConsoleOutput" PropertyName="ILRepackOutput" />
<Output TaskParameter="ExitCode" PropertyName="ExitCode" />
</Exec>
<Message Importance="high" Text="$(ILRepackOutput)" Condition="'$(ExitCode)' != '0'" />
<Delete Files="$(IntermediateOutputPath)ilrepack.txt" Condition="'$(ExitCode)' != '0'" />
<Touch AlwaysCreate="true" Files="$(IntermediateOutputPath)ilrepack.txt" Condition="'$(ExitCode)' == '0'" />
<Error Text="$(ILRepackOutput)" Condition="'$(ExitCode)' != '0' And '$(ContinueOnError)' != 'true'" />
<Delete Files="@(MergedAssemblies -&gt; '$(MSBuildProjectDirectory)\$(OutputPath)%(Filename)%(Extension)')" Condition="Exists('$(MSBuildProjectDirectory)\$(OutputPath)%(Filename)%(Extension)')" />
</Target>
</Project>

Просмотреть файл

@ -22,7 +22,7 @@ MSBUILD_TASK_ASSEMBLIES =
ALL_SOURCES:= $(shell git ls-files | sed 's/ /\\ /g') $(wildcard $(XAMARIN_MACDEV_PATH)/Xamarin.MacDev/*.cs) $(wildcard $(XAMARIN_MACDEV_PATH)/Xamarin.MacDev/*.csproj)
CONFIG = Debug
TARGETFRAMEWORK = net461
TARGETFRAMEWORK = netstandard2.0
##
## XI definitions

Просмотреть файл

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net461</TargetFrameworks>
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
<ItemGroup>

Просмотреть файл

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net461</TargetFrameworks>
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
<ItemGroup>
@ -10,9 +10,6 @@
<ProjectReference Include="..\Xamarin.MacDev.Tasks\Xamarin.MacDev.Tasks.csproj" />
<ProjectReference Include="..\Xamarin.Mac.Tasks.Core\Xamarin.Mac.Tasks.Core.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="ILRepack" Version="2.0.18" />
</ItemGroup>
<ItemGroup>
<None Include="*.targets">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
@ -25,34 +22,5 @@
</None>
</ItemGroup>
<Target Name="ILRepack" AfterTargets="CoreCompile" DependsOnTargets="CoreCompile" Inputs="@(IntermediateAssembly -&gt; '%(FullPath)')" Outputs="$(IntermediateOutputPath)ilrepack.txt" Returns="@(MergedAssemblies)" Condition="Exists(@(IntermediateAssembly -&gt; '%(FullPath)')) And '$(ILRepack)' != 'false'">
<ItemGroup>
<MergedAssemblies Include="@(ReferenceCopyLocalPaths)" Condition="
'%(Extension)' == '.dll'
And !$([System.String]::new('%(FileName)').EndsWith('.resources', StringComparison.OrdinalIgnoreCase))
And !$([System.String]::new('%(FileName)').StartsWith('Microsoft.Build.', StringComparison.OrdinalIgnoreCase))
And !$([System.String]::new('%(FullPath)').StartsWith('/Library/Frameworks/Mono.framework', StringComparison.OrdinalIgnoreCase))"
/>
<ReferenceCopyLocalDirs Include="@(ReferenceCopyLocalPaths -&gt; '%(RootDir)%(Directory)')" />
<ReferenceCopyLocalPaths Remove="@(MergedAssemblies)" />
<LibDir Include="@(ReferenceCopyLocalDirs -&gt; Distinct())" />
</ItemGroup>
<PropertyGroup>
<ILRepackArgs Condition="'$(AssemblyOriginatorKeyFile)' != ''">/keyfile:"$(AssemblyOriginatorKeyFile)"</ILRepackArgs>
<ILRepackArgs>$(ILRepackArgs) @(LibDir -&gt; '/lib:&quot;%(Identity).&quot;', ' ')</ILRepackArgs>
<ILRepackArgs>$(ILRepackArgs) /out:&quot;@(IntermediateAssembly -&gt; '%(FullPath)')&quot;</ILRepackArgs>
<ILRepackArgs>$(ILRepackArgs) &quot;@(IntermediateAssembly -&gt; '%(FullPath)')&quot;</ILRepackArgs>
<ILRepackArgs>$(ILRepackArgs) @(MergedAssemblies -&gt; '&quot;%(FullPath)&quot;', ' ')</ILRepackArgs>
<ILRepackArgs>$(ILRepackArgs) &quot;/lib:$(FrameworkPathOverride)/Facades&quot;</ILRepackArgs> <!-- This is needed for ilrepack to find netstandard.dll, which is referenced by the System.Text.Json assembly -->
</PropertyGroup>
<Exec Command="&quot;$(ILRepack)&quot; $(ILRepackArgs)" WorkingDirectory="$(MSBuildProjectDirectory)\$(OutputPath)" StandardErrorImportance="high" StandardOutputImportance="low" ConsoleToMSBuild="true" ContinueOnError="true">
<Output TaskParameter="ConsoleOutput" PropertyName="ILRepackOutput" />
<Output TaskParameter="ExitCode" PropertyName="ExitCode" />
</Exec>
<Message Importance="high" Text="$(ILRepackOutput)" Condition="'$(ExitCode)' != '0'" />
<Delete Files="$(IntermediateOutputPath)ilrepack.txt" Condition="'$(ExitCode)' != '0'" />
<Touch AlwaysCreate="true" Files="$(IntermediateOutputPath)ilrepack.txt" Condition="'$(ExitCode)' == '0'" />
<Error Text="$(ILRepackOutput)" Condition="'$(ExitCode)' != '0' And '$(ContinueOnError)' != 'true'" />
<Delete Files="@(MergedAssemblies -&gt; '$(MSBuildProjectDirectory)\$(OutputPath)%(Filename)%(Extension)')" Condition="Exists('$(MSBuildProjectDirectory)\$(OutputPath)%(Filename)%(Extension)')" />
</Target>
<Import Project="$(MSBuildThisFileDirectory)..\ILMerge.targets" />
</Project>

Просмотреть файл

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net461</TargetFrameworks>
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>

Просмотреть файл

@ -23,40 +23,74 @@ Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
Debug-net461|Any CPU = Debug-net461|Any CPU
Debug-netstandard2.0|Any CPU = Debug-netstandard2.0|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{93E12FA0-089C-4BC8-840F-43CFBC7927C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{93E12FA0-089C-4BC8-840F-43CFBC7927C7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{93E12FA0-089C-4BC8-840F-43CFBC7927C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{93E12FA0-089C-4BC8-840F-43CFBC7927C7}.Release|Any CPU.Build.0 = Release|Any CPU
{93E12FA0-089C-4BC8-840F-43CFBC7927C7}.Debug-net461|Any CPU.ActiveCfg = Debug|Any CPU
{93E12FA0-089C-4BC8-840F-43CFBC7927C7}.Debug-net461|Any CPU.Build.0 = Debug|Any CPU
{93E12FA0-089C-4BC8-840F-43CFBC7927C7}.Debug-netstandard2.0|Any CPU.ActiveCfg = Debug|Any CPU
{93E12FA0-089C-4BC8-840F-43CFBC7927C7}.Debug-netstandard2.0|Any CPU.Build.0 = Debug|Any CPU
{EDB0E879-5AE6-4E2B-925D-F59023A6AA8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EDB0E879-5AE6-4E2B-925D-F59023A6AA8D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EDB0E879-5AE6-4E2B-925D-F59023A6AA8D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EDB0E879-5AE6-4E2B-925D-F59023A6AA8D}.Release|Any CPU.Build.0 = Release|Any CPU
{EDB0E879-5AE6-4E2B-925D-F59023A6AA8D}.Debug-net461|Any CPU.ActiveCfg = Debug-netstandard2.0|Any CPU
{EDB0E879-5AE6-4E2B-925D-F59023A6AA8D}.Debug-net461|Any CPU.Build.0 = Debug-netstandard2.0|Any CPU
{EDB0E879-5AE6-4E2B-925D-F59023A6AA8D}.Debug-netstandard2.0|Any CPU.ActiveCfg = Debug-netstandard2.0|Any CPU
{EDB0E879-5AE6-4E2B-925D-F59023A6AA8D}.Debug-netstandard2.0|Any CPU.Build.0 = Debug-netstandard2.0|Any CPU
{CC3D9353-20C4-467A-8522-A9DED6F0C753}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CC3D9353-20C4-467A-8522-A9DED6F0C753}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CC3D9353-20C4-467A-8522-A9DED6F0C753}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CC3D9353-20C4-467A-8522-A9DED6F0C753}.Release|Any CPU.Build.0 = Release|Any CPU
{CC3D9353-20C4-467A-8522-A9DED6F0C753}.Debug-net461|Any CPU.ActiveCfg = Debug|Any CPU
{CC3D9353-20C4-467A-8522-A9DED6F0C753}.Debug-net461|Any CPU.Build.0 = Debug|Any CPU
{CC3D9353-20C4-467A-8522-A9DED6F0C753}.Debug-netstandard2.0|Any CPU.ActiveCfg = Debug|Any CPU
{CC3D9353-20C4-467A-8522-A9DED6F0C753}.Debug-netstandard2.0|Any CPU.Build.0 = Debug|Any CPU
{534D7C5A-0E1C-4C58-9E48-21B1A98919EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{534D7C5A-0E1C-4C58-9E48-21B1A98919EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{534D7C5A-0E1C-4C58-9E48-21B1A98919EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{534D7C5A-0E1C-4C58-9E48-21B1A98919EB}.Release|Any CPU.Build.0 = Release|Any CPU
{534D7C5A-0E1C-4C58-9E48-21B1A98919EB}.Debug-net461|Any CPU.ActiveCfg = Debug|Any CPU
{534D7C5A-0E1C-4C58-9E48-21B1A98919EB}.Debug-net461|Any CPU.Build.0 = Debug|Any CPU
{534D7C5A-0E1C-4C58-9E48-21B1A98919EB}.Debug-netstandard2.0|Any CPU.ActiveCfg = Debug|Any CPU
{534D7C5A-0E1C-4C58-9E48-21B1A98919EB}.Debug-netstandard2.0|Any CPU.Build.0 = Debug|Any CPU
{C8D98DC1-5122-4B10-A152-17196C7BD9AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C8D98DC1-5122-4B10-A152-17196C7BD9AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C8D98DC1-5122-4B10-A152-17196C7BD9AC}.Release|Any CPU.ActiveCfg = Debug|Any CPU
{C8D98DC1-5122-4B10-A152-17196C7BD9AC}.Release|Any CPU.Build.0 = Debug|Any CPU
{C8D98DC1-5122-4B10-A152-17196C7BD9AC}.Debug-net461|Any CPU.ActiveCfg = Debug|Any CPU
{C8D98DC1-5122-4B10-A152-17196C7BD9AC}.Debug-net461|Any CPU.Build.0 = Debug|Any CPU
{C8D98DC1-5122-4B10-A152-17196C7BD9AC}.Debug-netstandard2.0|Any CPU.ActiveCfg = Debug|Any CPU
{C8D98DC1-5122-4B10-A152-17196C7BD9AC}.Debug-netstandard2.0|Any CPU.Build.0 = Debug|Any CPU
{44605724-8002-48E1-895F-7CB068099B6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{44605724-8002-48E1-895F-7CB068099B6A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{44605724-8002-48E1-895F-7CB068099B6A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{44605724-8002-48E1-895F-7CB068099B6A}.Release|Any CPU.Build.0 = Release|Any CPU
{44605724-8002-48E1-895F-7CB068099B6A}.Debug-net461|Any CPU.ActiveCfg = Debug|Any CPU
{44605724-8002-48E1-895F-7CB068099B6A}.Debug-net461|Any CPU.Build.0 = Debug|Any CPU
{44605724-8002-48E1-895F-7CB068099B6A}.Debug-netstandard2.0|Any CPU.ActiveCfg = Debug|Any CPU
{44605724-8002-48E1-895F-7CB068099B6A}.Debug-netstandard2.0|Any CPU.Build.0 = Debug|Any CPU
{7B095849-6FDB-4BD2-9B59-569D81A1A809}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7B095849-6FDB-4BD2-9B59-569D81A1A809}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7B095849-6FDB-4BD2-9B59-569D81A1A809}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7B095849-6FDB-4BD2-9B59-569D81A1A809}.Release|Any CPU.Build.0 = Release|Any CPU
{7B095849-6FDB-4BD2-9B59-569D81A1A809}.Debug-net461|Any CPU.ActiveCfg = Debug|Any CPU
{7B095849-6FDB-4BD2-9B59-569D81A1A809}.Debug-net461|Any CPU.Build.0 = Debug|Any CPU
{7B095849-6FDB-4BD2-9B59-569D81A1A809}.Debug-netstandard2.0|Any CPU.ActiveCfg = Debug|Any CPU
{7B095849-6FDB-4BD2-9B59-569D81A1A809}.Debug-netstandard2.0|Any CPU.Build.0 = Debug|Any CPU
{AF1AC7C3-F6DD-4E46-B897-9DBB90B158EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AF1AC7C3-F6DD-4E46-B897-9DBB90B158EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AF1AC7C3-F6DD-4E46-B897-9DBB90B158EC}.Release|Any CPU.ActiveCfg = Debug|Any CPU
{AF1AC7C3-F6DD-4E46-B897-9DBB90B158EC}.Release|Any CPU.Build.0 = Debug|Any CPU
{AF1AC7C3-F6DD-4E46-B897-9DBB90B158EC}.Debug-net461|Any CPU.ActiveCfg = Debug|Any CPU
{AF1AC7C3-F6DD-4E46-B897-9DBB90B158EC}.Debug-net461|Any CPU.Build.0 = Debug|Any CPU
{AF1AC7C3-F6DD-4E46-B897-9DBB90B158EC}.Debug-netstandard2.0|Any CPU.ActiveCfg = Debug|Any CPU
{AF1AC7C3-F6DD-4E46-B897-9DBB90B158EC}.Debug-netstandard2.0|Any CPU.Build.0 = Debug|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

Просмотреть файл

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net461</TargetFrameworks>
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Mono.Cecil" Version="0.9.5" PrivateAssets="All" />
<PackageReference Include="Mono.Cecil" Version="0.11.1" />
<!-- Compile against Microsoft.Build* NuGet refs, but do not copy to OutputDir. -->
<PackageReference Include="Microsoft.Build" Version="15.9.20" IncludeAssets="compile" />
<PackageReference Include="Microsoft.Build.Framework" Version="15.9.20" IncludeAssets="compile" />

Просмотреть файл

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net461</TargetFrameworks>
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
<ItemGroup>

Просмотреть файл

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net461</TargetFrameworks>
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
<ItemGroup>
@ -10,9 +10,6 @@
<ProjectReference Include="..\Xamarin.MacDev.Tasks\Xamarin.MacDev.Tasks.csproj" />
<ProjectReference Include="..\Xamarin.iOS.Tasks.Core\Xamarin.iOS.Tasks.Core.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="ILRepack" Version="2.0.18" />
</ItemGroup>
<ItemGroup>
<!-- Compile against Microsoft.Build* NuGet refs, but do not copy to OutputDir. -->
<Reference Include="Microsoft.Build" HintPath="$(MSBuildBinPath)\Microsoft.Build.dll" />
@ -21,34 +18,5 @@
<Reference Include="Microsoft.Build.Utilities.Core" HintPath="$(MSBuildBinPath)\Microsoft.Build.Utilities.Core.dll" />
</ItemGroup>
<Target Name="ILRepack" AfterTargets="CoreCompile" DependsOnTargets="CoreCompile" Inputs="@(IntermediateAssembly -&gt; '%(FullPath)')" Outputs="$(IntermediateOutputPath)ilrepack.txt" Returns="@(MergedAssemblies)" Condition="Exists(@(IntermediateAssembly -&gt; '%(FullPath)')) And '$(ILRepack)' != 'false'">
<ItemGroup>
<MergedAssemblies Include="@(ReferenceCopyLocalPaths)" Condition="
'%(Extension)' == '.dll'
And !$([System.String]::new('%(FileName)').EndsWith('.resources', StringComparison.OrdinalIgnoreCase))
And !$([System.String]::new('%(FileName)').StartsWith('Microsoft.Build.', StringComparison.OrdinalIgnoreCase))
And !$([System.String]::new('%(FullPath)').StartsWith('/Library/Frameworks/Mono.framework', StringComparison.OrdinalIgnoreCase))"
/>
<ReferenceCopyLocalDirs Include="@(ReferenceCopyLocalPaths -&gt; '%(RootDir)%(Directory)')" />
<ReferenceCopyLocalPaths Remove="@(MergedAssemblies)" />
<LibDir Include="@(ReferenceCopyLocalDirs -&gt; Distinct())" />
</ItemGroup>
<PropertyGroup>
<ILRepackArgs Condition="'$(AssemblyOriginatorKeyFile)' != ''">/keyfile:"$(AssemblyOriginatorKeyFile)"</ILRepackArgs>
<ILRepackArgs>$(ILRepackArgs) @(LibDir -&gt; '/lib:&quot;%(Identity).&quot;', ' ')</ILRepackArgs>
<ILRepackArgs>$(ILRepackArgs) /out:&quot;@(IntermediateAssembly -&gt; '%(FullPath)')&quot;</ILRepackArgs>
<ILRepackArgs>$(ILRepackArgs) &quot;@(IntermediateAssembly -&gt; '%(FullPath)')&quot;</ILRepackArgs>
<ILRepackArgs>$(ILRepackArgs) @(MergedAssemblies -&gt; '&quot;%(FullPath)&quot;', ' ')</ILRepackArgs>
<ILRepackArgs>$(ILRepackArgs) &quot;/lib:$(FrameworkPathOverride)/Facades&quot;</ILRepackArgs> <!-- This is needed for ilrepack to find netstandard.dll, which is referenced by the System.Text.Json assembly -->
</PropertyGroup>
<Exec Command="&quot;$(ILRepack)&quot; $(ILRepackArgs)" WorkingDirectory="$(MSBuildProjectDirectory)\$(OutputPath)" StandardErrorImportance="high" StandardOutputImportance="low" ConsoleToMSBuild="true" ContinueOnError="true">
<Output TaskParameter="ConsoleOutput" PropertyName="ILRepackOutput" />
<Output TaskParameter="ExitCode" PropertyName="ExitCode" />
</Exec>
<Message Importance="high" Text="$(ILRepackOutput)" Condition="'$(ExitCode)' != '0'" />
<Delete Files="$(IntermediateOutputPath)ilrepack.txt" Condition="'$(ExitCode)' != '0'" />
<Touch AlwaysCreate="true" Files="$(IntermediateOutputPath)ilrepack.txt" Condition="'$(ExitCode)' == '0'" />
<Error Text="$(ILRepackOutput)" Condition="'$(ExitCode)' != '0' And '$(ContinueOnError)' != 'true'" />
<Delete Files="@(MergedAssemblies -&gt; '$(MSBuildProjectDirectory)\$(OutputPath)%(Filename)%(Extension)')" Condition="Exists('$(MSBuildProjectDirectory)\$(OutputPath)%(Filename)%(Extension)')" />
</Target>
<Import Project="$(MSBuildThisFileDirectory)..\ILMerge.targets" />
</Project>

Просмотреть файл

@ -2,7 +2,6 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Remoting;
using System.Runtime.Serialization.Formatters.Binary;
using System.Threading;
using Microsoft.Build.Framework;

Просмотреть файл

@ -2,7 +2,6 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Remoting;
using System.Runtime.Serialization.Formatters.Binary;
using System.Threading;
using Microsoft.Build.Framework;

Просмотреть файл

@ -6,15 +6,59 @@
<DisableTransitiveProjectReferences>true</DisableTransitiveProjectReferences>
</PropertyGroup>
<!--
NUnit doesn't support executing a test library built for netstandard2.0,
which means we need some custom logicto build the test library (this
csproj) for net461 while at the same time building the code we want to
test for netstandard2.0.
We use the configuration to distinguish between them: A
Debug-netstandard2.0 and Debug-net461 configuration, which indicates how
the code we want to test is built (not how the test library itself is
built).
Another problem is that the task assembly (Xamarin.iOS.Tasks.dll) is
ILMerged, which really confuses VSfM when using a project reference to the
task assembly project file, so instead use a reference to the final
Xamarin.iOS.Tasks.dll assembly instead. This is where we specify which
Xamarin.iOS.Tasks.dll we want to test (which target framework it was built
with), by using the TasksAssemblyTargetFramework variable. We also need to
map our custom configurations to the ones used in the task library project
file (the TasksAssemblyConfiguration variable). This approach also
requires us to manually build the task assembly before building the test
assembly (the BuildTasksAssembly target).
-->
<PropertyGroup Condition="'$(Configuration)' == 'Debug-netstandard2.0'">
<TasksAssemblyTargetFramework>netstandard2.0</TasksAssemblyTargetFramework>
<TasksAssemblyConfiguration>Debug</TasksAssemblyConfiguration>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Debug-net461'">
<TasksAssemblyTargetFramework>net461</TasksAssemblyTargetFramework>
<TasksAssemblyConfiguration>Debug</TasksAssemblyConfiguration>
</PropertyGroup>
<PropertyGroup>
<!-- Set some default values -->
<TasksAssemblyTargetFramework Condition="'$(TasksAssemblyTargetFramework)' == ''">netstandard2.0</TasksAssemblyTargetFramework>
<TasksAssemblyConfiguration Condition="'$(TasksAssemblyConfiguration)' == ''">Debug</TasksAssemblyConfiguration>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.Build" HintPath="$(MSBuildBinPath)\Microsoft.Build.dll" />
<Reference Include="Microsoft.Build.Framework" HintPath="$(MSBuildBinPath)\Microsoft.Build.Framework.dll" />
<Reference Include="Microsoft.Build.Tasks.Core" HintPath="$(MSBuildBinPath)\Microsoft.Build.Tasks.Core.dll" />
<Reference Include="Microsoft.Build.Utilities.Core" HintPath="$(MSBuildBinPath)\Microsoft.Build.Utilities.Core.dll" />
<Reference Include="Xamarin.iOS.Tasks" HintPath="..\..\Xamarin.iOS.Tasks\bin\$(TasksAssemblyConfiguration)\$(TasksAssemblyTargetFramework)\Xamarin.iOS.Tasks.dll" />
<PackageReference Include="NUnit" Version="3.11.0" />
<PackageReference Include="NUnit.ConsoleRunner" Version="3.10.0" />
</ItemGroup>
<Target Name="BuildTasksAssembly" AfterTargets="BeforeBuild">
<MSBuild Projects="..\..\Xamarin.iOS.Tasks\Xamarin.iOS.Tasks.csproj" Properties="TargetFramework=$(TasksAssemblyTargetFramework);Configuration=$(TasksAssemblyConfiguration)" />
</Target>
<ItemGroup>
<!-- Copy system Microsoft.Build*.dll and dependencies for tests to run against. We can remove this
and rely entirely on NuGet assets when mono/msbuild is merged into microsoft/msbuild. -->
@ -25,9 +69,6 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Xamarin.iOS.Tasks\Xamarin.iOS.Tasks.csproj" PrivateAssets="All" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\..\tests\common\Configuration.cs">
<Link>Configuration.cs</Link>

Просмотреть файл

@ -207,11 +207,12 @@ killall:
@killall Touch.Server >/dev/null 2>&1 || true
NUNIT_MSBUILD_DIR=$(TOP)/packages/NUnit.Runners.2.6.4/tools/lib
test-ios-tasks: verify-system-vsmac-xcode-match
$(SYSTEM_XIBUILD) -- $(TOP)/msbuild/Xamarin.MacDev.Tasks.sln
cd $(TOP)/msbuild/tests/Xamarin.iOS.Tasks.Tests && $(SYSTEM_XIBUILD) -t -- $(abspath $(TOP)/tools/nunit3-console-3.10.0) $(abspath $(TOP)/msbuild/tests/Xamarin.iOS.Tasks.Tests/bin/Debug/net461/Xamarin.iOS.Tasks.Tests.dll) "--result=$(abspath $(CURDIR)/TestResults_Xamarin.iOS.Tasks.Tests.xml);format=nunit2" -labels=All $(TEST_FIXTURE) || touch .failed-stamp
@[[ -z "$$BUILD_REPOSITORY" ]] || ( xsltproc $(TOP)/tests/HtmlTransform.xslt $(NUNIT_MSBUILD_DIR)/TestResults_Xamarin.iOS.Tasks.Tests.xml > $(TOP)/tests/index.html && echo "@MonkeyWrench: AddFile: $$PWD/index.html" )
@if test -e $(NUNIT_MSBUILD_DIR)/.failed-stamp; then rm $(NUNIT_MSBUILD_DIR)/.failed-stamp; exit 1; fi
test-ios-tasks: test-ios-tasks-net461 test-ios-tasks-netstandard2.0
test-ios-tasks-%: verify-system-vsmac-xcode-match
$(SYSTEM_MSBUILD) $(TOP)/msbuild/tests/Xamarin.iOS.Tasks.Tests/Xamarin.iOS.Tasks.Tests.csproj /p:Configuration=Debug-$*
cd $(TOP)/msbuild/tests/Xamarin.iOS.Tasks.Tests && $(SYSTEM_XIBUILD) -t -- $(abspath $(TOP)/tools/nunit3-console-3.10.0) $(abspath $(TOP)/msbuild/tests/Xamarin.iOS.Tasks.Tests/bin/Debug-$*/net461/Xamarin.iOS.Tasks.Tests.dll) "--result=$(abspath $(CURDIR)/TestResults_$*_Xamarin.iOS.Tasks.Tests.xml);format=nunit2" -labels=All $(TEST_FIXTURE) || touch .failed-stamp
@[[ -z "$$BUILD_REPOSITORY" ]] || ( xsltproc $(TOP)/tests/HtmlTransform.xslt $(CURDIR)/TestResults_$*_Xamarin.iOS.Tasks.Tests.xml > $(TOP)/tests/index-$*.html && echo "@MonkeyWrench: AddFile: $$PWD/index-$*.html" )
@if test -e $(CURDIR)/.$@-failed-stamp; then rm $(CURDIR)/.$@-failed-stamp; exit 1; fi
test-install-sources:
$(SYSTEM_XIBUILD) -- $(TOP)/tools/install-source/InstallSourcesTests/InstallSourcesTests.csproj

Просмотреть файл

@ -888,27 +888,56 @@ namespace xharness
//Tasks.AddRange (await CreateRunSimulatorTasksAsync ());
var buildiOSMSBuild = new XBuildTask ()
var buildiOSMSBuild_net461 = new XBuildTask ()
{
Jenkins = this,
TestProject = new TestProject (Path.GetFullPath (Path.Combine (Harness.RootDirectory, "..", "msbuild", "Xamarin.MacDev.Tasks.sln"))),
TestProject = new TestProject (Path.GetFullPath (Path.Combine (Harness.RootDirectory, "..", "msbuild", "tests", "Xamarin.iOS.Tasks.Tests", "Xamarin.iOS.Tasks.Tests.csproj"))),
SpecifyPlatform = false,
SpecifyConfiguration = false,
SpecifyConfiguration = true,
ProjectConfiguration = "Debug-net461",
Platform = TestPlatform.iOS,
UseMSBuild = true,
SolutionPath = Path.GetFullPath (Path.Combine (Harness.RootDirectory, "..", "msbuild", "Xamarin.MacDev.Tasks.sln")),
SupportsParallelExecution = false,
};
var nunitExecutioniOSMSBuild = new NUnitExecuteTask (buildiOSMSBuild)
var nunitExecutioniOSMSBuild_net461 = new NUnitExecuteTask (buildiOSMSBuild_net461)
{
TestLibrary = Path.Combine (Harness.RootDirectory, "..", "msbuild", "tests", "Xamarin.iOS.Tasks.Tests", "bin", "Debug", "net461", "Xamarin.iOS.Tasks.Tests.dll"),
TestProject = new TestProject (Path.Combine (Path.GetDirectoryName (buildiOSMSBuild.TestProject.Path), "tests", "Xamarin.iOS.Tasks.Tests", "Xamarin.iOS.Tasks.Tests.csproj")),
TestLibrary = Path.Combine (Harness.RootDirectory, "..", "msbuild", "tests", "Xamarin.iOS.Tasks.Tests", "bin", "Debug-net461", "net461", "Xamarin.iOS.Tasks.Tests.dll"),
TestProject = buildiOSMSBuild_net461.TestProject,
ProjectConfiguration = "Debug-net461",
Platform = TestPlatform.iOS,
TestName = "MSBuild tests",
Mode = "iOS",
Mode = "iOS (net461)",
Timeout = TimeSpan.FromMinutes (60),
Ignored = !IncludeiOSMSBuild,
SupportsParallelExecution = false,
};
Tasks.Add (nunitExecutioniOSMSBuild);
Tasks.Add (nunitExecutioniOSMSBuild_net461);
var buildiOSMSBuild_netstandard2 = new XBuildTask () {
Jenkins = this,
TestProject = new TestProject (Path.GetFullPath (Path.Combine (Harness.RootDirectory, "..", "msbuild", "tests", "Xamarin.iOS.Tasks.Tests", "Xamarin.iOS.Tasks.Tests.csproj"))),
SpecifyPlatform = false,
SpecifyConfiguration = true,
ProjectConfiguration = "Debug-netstandard2.0",
Platform = TestPlatform.iOS,
UseMSBuild = true,
SolutionPath = Path.GetFullPath (Path.Combine (Harness.RootDirectory, "..", "msbuild", "Xamarin.MacDev.Tasks.sln")),
SupportsParallelExecution = false,
};
var nunitExecutioniOSMSBuild_netstandard2 = new NUnitExecuteTask (buildiOSMSBuild_netstandard2) {
TestLibrary = Path.Combine (Harness.RootDirectory, "..", "msbuild", "tests", "Xamarin.iOS.Tasks.Tests", "bin", "Debug-netstandard2.0", "net461", "Xamarin.iOS.Tasks.Tests.dll"),
TestProject = buildiOSMSBuild_netstandard2.TestProject,
ProjectConfiguration = "Debug-netstandard2.0",
Platform = TestPlatform.iOS,
TestName = "MSBuild tests",
Mode = "iOS (netstandard2.0)",
Timeout = TimeSpan.FromMinutes (60),
Ignored = !IncludeiOSMSBuild,
SupportsParallelExecution = false,
};
Tasks.Add (nunitExecutioniOSMSBuild_netstandard2);
var buildInstallSources = new XBuildTask ()
{
Jenkins = this,