Merge branch '3.1.0'
This commit is contained in:
Коммит
043fe88bb5
|
@ -0,0 +1,64 @@
|
|||
using System;
|
||||
using Microsoft.Build.Utilities;
|
||||
using Mono.Cecil;
|
||||
using Mono.Cecil.Rocks;
|
||||
|
||||
using Mono.Cecil.Cil;
|
||||
using Microsoft.Build.Framework;
|
||||
using System.IO;
|
||||
|
||||
namespace XFCorePostProcessor.Tasks
|
||||
{
|
||||
public class FixXFCoreAssembly : Task
|
||||
{
|
||||
[Required]
|
||||
public string Assembly { get; set; }
|
||||
public string ReferencePath { get; set; }
|
||||
|
||||
public override bool Execute()
|
||||
{
|
||||
Log.LogMessage("Generating backcompat code for #2835");
|
||||
|
||||
var resolver = new AssemblyResolver();
|
||||
|
||||
if (!string.IsNullOrEmpty(ReferencePath)) {
|
||||
var paths = ReferencePath.Replace("//", "/").Split(';');
|
||||
foreach (var p in paths) {
|
||||
var searchpath = Path.GetDirectoryName(p);
|
||||
resolver.AddSearchDirectory(searchpath);
|
||||
}
|
||||
}
|
||||
|
||||
using (var assemblyDefinition = AssemblyDefinition.ReadAssembly(Assembly, new ReaderParameters { AssemblyResolver = resolver, ReadWrite = true, ReadSymbols = true })) {
|
||||
var resourceLoader = assemblyDefinition.MainModule.GetType("Xamarin.Forms.Internals.ResourceLoader");
|
||||
var module = assemblyDefinition.MainModule;
|
||||
var methodDef = new MethodDefinition("get_ResourceProvider",
|
||||
MethodAttributes.Static | MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig,
|
||||
module.ImportReference(module.ImportReference(typeof(Func<,>)).MakeGenericInstanceType(module.ImportReference(typeof(string)),
|
||||
module.ImportReference(typeof(string)))));
|
||||
|
||||
var body = new MethodBody(methodDef);
|
||||
var il = body.GetILProcessor();
|
||||
il.Emit(OpCodes.Ldnull);
|
||||
il.Emit(OpCodes.Ret);
|
||||
methodDef.Body = body;
|
||||
resourceLoader.Methods.Add(methodDef);
|
||||
|
||||
assemblyDefinition.Write(new WriterParameters {
|
||||
WriteSymbols = true,
|
||||
});
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
class AssemblyResolver : DefaultAssemblyResolver
|
||||
{
|
||||
public void AddAssembly(string p)
|
||||
{
|
||||
RegisterAssembly(AssemblyDefinition.ReadAssembly(p, new ReaderParameters {
|
||||
AssemblyResolver = this
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Build" Version="15.7.179" />
|
||||
<PackageReference Include="Microsoft.Build.Framework" Version="15.7.179" />
|
||||
<PackageReference Include="Microsoft.Build.Utilities.Core" Version="15.7.179" />
|
||||
<PackageReference Include="Microsoft.Build.Tasks.Core" Version="15.7.179" />
|
||||
<PackageReference Include="Mono.Cecil" Version="0.10.0-beta7" />
|
||||
</ItemGroup>
|
||||
</Project>
|
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/Microsoft.Build.Framework.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/Microsoft.Build.Framework.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/Microsoft.Build.Tasks.Core.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/Microsoft.Build.Tasks.Core.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/Microsoft.Build.Utilities.Core.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/Microsoft.Build.Utilities.Core.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/Microsoft.Build.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/Microsoft.Build.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/Mono.Cecil.Mdb.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/Mono.Cecil.Mdb.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/Mono.Cecil.Pdb.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/Mono.Cecil.Pdb.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/Mono.Cecil.Rocks.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/Mono.Cecil.Rocks.dll
Executable file
Двоичный файл не отображается.
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Buffers.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Buffers.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Collections.Concurrent.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Collections.Concurrent.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Collections.Immutable.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Collections.Immutable.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Dynamic.Runtime.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Dynamic.Runtime.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.IO.FileSystem.Primitives.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.IO.FileSystem.Primitives.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Linq.Expressions.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Linq.Expressions.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Linq.Parallel.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Linq.Parallel.dll
Executable file
Двоичный файл не отображается.
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.ObjectModel.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.ObjectModel.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Reflection.Emit.ILGeneration.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Reflection.Emit.ILGeneration.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Reflection.Emit.Lightweight.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Reflection.Emit.Lightweight.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Reflection.Emit.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Reflection.Emit.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Reflection.Metadata.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Reflection.Metadata.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Reflection.TypeExtensions.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Reflection.TypeExtensions.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Resources.Writer.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Resources.Writer.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Runtime.InteropServices.RuntimeInformation.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Runtime.InteropServices.RuntimeInformation.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Runtime.Loader.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Runtime.Loader.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Runtime.Numerics.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Runtime.Numerics.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Runtime.Serialization.Primitives.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Runtime.Serialization.Primitives.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Security.Cryptography.Primitives.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Security.Cryptography.Primitives.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Text.Encoding.CodePages.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Text.Encoding.CodePages.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Threading.Tasks.Dataflow.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Threading.Tasks.Dataflow.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Threading.Thread.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Threading.Thread.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Threading.dll
Executable file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/System.Threading.dll
Executable file
Двоичный файл не отображается.
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/XFCorePostProcessor.Tasks.dll
Normal file
Двоичные данные
XFCorePostProcessor.Tasks/bin/Debug/netstandard2.0/XFCorePostProcessor.Tasks.dll
Normal file
Двоичный файл не отображается.
|
@ -17,4 +17,8 @@
|
|||
<PackageReference Include="System.Dynamic.Runtime" Version="4.3.0" />
|
||||
</ItemGroup>
|
||||
<Import Project="..\Xamarin.Flex\Xamarin.Flex.projitems" Label="Shared" Condition="Exists('..\Xamarin.Flex\Xamarin.Flex.projitems')" />
|
||||
<UsingTask TaskName="XFCorePostProcessor.Tasks.FixXFCoreAssembly" AssemblyFile="..\XFCorePostProcessor.Tasks\bin\Debug\netstandard2.0\XFCorePostProcessor.Tasks.dll" />
|
||||
<Target AfterTargets="AfterCompile" Name="ShameHat">
|
||||
<FixXFCoreAssembly Assembly="$(IntermediateOutputPath)$(TargetFileName)" ReferencePath="@(ReferencePath)" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
using System;
|
||||
using System.Reflection;
|
||||
using System.Linq;
|
||||
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace Xamarin.Forms.Xaml.UnitTests
|
||||
{
|
||||
[TestFixture]
|
||||
public class XFCorePostProcessorCodeInjected
|
||||
{
|
||||
[Test]
|
||||
public void InjectedCodeIsPresent()
|
||||
{
|
||||
var resLoader = typeof(Xamarin.Forms.Internals.ResourceLoader);
|
||||
Assert.True(resLoader.GetMethods().Any(mi => mi.Name == "get_ResourceProvider" && mi.ReturnType == typeof(Func<string, string>)));
|
||||
Assert.True(resLoader.GetMethods().Any(mi => mi.Name == "get_ResourceProvider" && mi.ReturnType == typeof(Func<AssemblyName, string, string>)));
|
||||
Assert.True(resLoader.GetProperty("ResourceProvider") != null);
|
||||
Assert.True(resLoader.GetProperty("ResourceProvider").GetMethod.ReturnType == typeof(Func<AssemblyName, string, string>));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -621,6 +621,7 @@
|
|||
<Compile Include="Issues\Gh2574.xaml.cs">
|
||||
<DependentUpon>Gh2574.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="XFCorePostProcessorCodeInjected.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="..\.nuspec\Xamarin.Forms.Debug.targets" Condition="'$(BuildingInsideVisualStudio)' == 'true' AND Exists('..\.nuspec\Xamarin.Forms.Build.Tasks.dll')" />
|
||||
|
|
|
@ -174,6 +174,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Forms.Maps.Design",
|
|||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Forms.Xaml.Design", "Xamarin.Forms.Xaml.Design\Xamarin.Forms.Xaml.Design.csproj", "{65BC4888-CC59-428A-9B75-540CF1C09480}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XFCorePostProcessor.Tasks", "XFCorePostProcessor.Tasks\XFCorePostProcessor.Tasks.csproj", "{5BBF4A3F-4AD1-47FD-B250-05EA793F939D}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SharedMSBuildProjectFiles) = preSolution
|
||||
Xamarin.Forms.Controls.Issues\Xamarin.Forms.Controls.Issues.Shared\Xamarin.Forms.Controls.Issues.Shared.projitems*{0a39a74b-6f7a-4d41-84f2-b0ccdce899df}*SharedItemsImports = 4
|
||||
|
|
Загрузка…
Ссылка в новой задаче