diff options
author | Andon Andonov <andon.andonov@microsoft.com> | 2017-12-01 00:55:12 +0300 |
---|---|---|
committer | Andon Andonov <andon.andonov@microsoft.com> | 2017-12-21 02:10:10 +0300 |
commit | 2e77fd382da0d8594f8682832622dd0447e28a70 (patch) | |
tree | 8697f09b725ed6850b0dc411a53578dc3c535f73 /samples/WebApi | |
parent | d5ecb0cb9e85eeba829aece223556ee611f7ddf8 (diff) |
Add sample app and guide
Diffstat (limited to 'samples/WebApi')
-rw-r--r-- | samples/WebApi/Controllers/ValuesController.cs | 28 | ||||
-rw-r--r-- | samples/WebApi/Program.cs | 25 | ||||
-rw-r--r-- | samples/WebApi/README.md | 115 | ||||
-rw-r--r-- | samples/WebApi/SampleWebApi.csproj | 19 | ||||
-rw-r--r-- | samples/WebApi/Startup.cs | 40 | ||||
-rw-r--r-- | samples/WebApi/appsettings.Development.json | 10 | ||||
-rw-r--r-- | samples/WebApi/appsettings.json | 15 | ||||
-rw-r--r-- | samples/WebApi/nuget.config | 8 | ||||
-rw-r--r-- | samples/WebApi/rd.xml | 164 |
9 files changed, 424 insertions, 0 deletions
diff --git a/samples/WebApi/Controllers/ValuesController.cs b/samples/WebApi/Controllers/ValuesController.cs new file mode 100644 index 000000000..50f3f8f05 --- /dev/null +++ b/samples/WebApi/Controllers/ValuesController.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; + +namespace SampleWebApi.Controllers +{ + public class ValuesController + { + [HttpGet("/")] + public string Hello() => "Hello World!"; + + // GET api/values + [HttpGet("/api/values")] + public IEnumerable<string> Get() + { + return new string[] { "value1", "value2" }; + } + + // GET api/values/5 + [HttpGet("/api/values/{id}")] + public string Get(int id) + { + return "value is " + id; + } + } +} diff --git a/samples/WebApi/Program.cs b/samples/WebApi/Program.cs new file mode 100644 index 000000000..4002ba047 --- /dev/null +++ b/samples/WebApi/Program.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; + +namespace SampleWebApi +{ + public class Program + { + public static void Main(string[] args) + { + BuildWebHost(args).Run(); + } + + public static IWebHost BuildWebHost(string[] args) => + WebHost.CreateDefaultBuilder(args) + .UseStartup<Startup>() + .Build(); + } +} diff --git a/samples/WebApi/README.md b/samples/WebApi/README.md new file mode 100644 index 000000000..dcef4765a --- /dev/null +++ b/samples/WebApi/README.md @@ -0,0 +1,115 @@ +# Description +This is a sample application, which uses CoreRT to compile a .NET Core Web API sample. +TODO WIP - Might not work on Linix + +# Building a WebAPI app with CoreRT + +## Install the .NET Core SDK +CoreRT is and AOT-optimized .NET Core runtime. If you're new to .NET Core make sure to visit the [official starting page](http://dotnet.github.io). It will guide you through installing pre-requisites and building your first app. +If you're already familiar with .NET Core make sure you've [downloaded and installed the .NET Core 2 SDK](https://www.microsoft.com/net/download/core). + +## Create your app + +Open a **new** shell/command prompt window and run the following commands. +``> dotnet new webapi -o myApp`` + +``> cd myApp`` + +## Add CoreRT to your project + +Using CoreRT to compile your application is done via the ILCompiler NuGet package. + +In your shell/command prompt navigate to the root directory of your project run the command + +`` dotnet new nuget `` + +This will add a nuget.config file to your application. Open the file and in the ``<packageSources> `` element under ``<clear/>`` add the following: + +``<add key="dotnet-core" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" /> `` +``<add key="aspnet-core" value="https://dotnet.myget.org/F/aspnetcore-release/api/v3/index.json" /> `` + +Once you've added the package source, add a reference to the compiler by running the following command: + +`` dotnet add package Microsoft.DotNet.ILCompiler -v <Version> `` + +where ``<Version>`` is the [latest version of the ILCompiler package](https://dotnet.myget.org/feed/dotnet-core/package/nuget/Microsoft.DotNet.ILCompiler) (e.g. 1.0.0-alpha-26006-02). + +After the package has been succesfully added to your project, open the file called ``Startup.cs`` and in the ``ConfigureServices()`` method modify the line: + + services.AddMvc(); + +to + + services.AddMvcCore().AddJsonFormatters(); + +## Using reflection +Runtime directives are XML configuration files, which specify which elements of your program are available for reflection. They are used at compile-time to enable AOT compilation in applications at runtime. + +In this sample a basic rd.xml file has been added for a simple Web API application under the root project folder. Copy its contents to your application directory and modify the +``<Assembly Name="SampleWebApi" Dynamic="Required All" /> `` element to use your app's name. + +If your application makes use of reflection, you will need to create a rd.xml file specifying explicitly which assemblies and types should be made available. For example, in your .NET Core Web API application, reflection is required to determine the correct namespace, from which to load the ``Startup`` type. Both are defined respectively via the ``<Assembly> `` and ``<Type>`` attributes. For example, in the case of our specific application; + + <Assembly Name="SampleWebApi"> + <Type Name="SampleWebApi.Startup" Dynamic="Required All" /> + </Assembly> + +At runtime, if a method or type is not found or cannot be loaded, an exception will be thrown. The exception message will contain information on the missing type reference, which you can then add to the rd.xml of your program. + +Once you've created a rd.xml file, navigate to the root directory of your project and open its ``.csproj `` file and in the first ``<PropertyGroup>`` element add the following: + + <RdXmlFile>path_to_rdxml_file\rd.xml</RdXmlFile> + <RuntimeIdentifiers>runtime_identifier</RuntimeIdentifiers> + +where path_to_rdxml_file is the location of the file on your disk and runtime_identifier is one of win-x64, linux-x64 or osx-x64, depending on the OS for which you would like to publish. Under the second ``<ItemGroup>`` remove the line containing a reference to ``Microsoft.AspNetCore.All`` and substitute it with: + + <PackageReference Include="Microsoft.AspNetCore" Version="2.0.1" /> + <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.0.1" /> + <PackageReference Include="Microsoft.AspNetCore.Mvc.Formatters.Json" Version="2.0.1" /> + +After you've created your rd.xml file and specified its location, open your application's controller file (in the default template this should be called ``ValuesController.cs``) and substitute the ValuesController class with the following: + + public class ValuesController + { + [HttpGet("/")] + public string Hello() => "Hello World!"; + + // GET api/values + [HttpGet("/api/values")] + public IEnumerable<string> Get() + { + return new string[] { "value1", "value2" }; + } + // GET api/values/5 + [HttpGet("/api/values/{id}")] + public string Get(int id) + { + return "Your value is " + id; + } + } + +(note the removed inheritance and [Route] directive). Also note that URL request paths are explicitly defined on each method. + + +## Restore and Publish your app +In your console run the command: + +`` dotnet restore `` + +This will restore your application's packages and download and import the correct version of the ILCompiler for your runtime. + +Once the package has been successfully added it's time to compile and publish your app! If you're using Windows, make sure you're using ``x64 Native Tools Command Prompt for VS 2017`` instead of the standard Windows command prompt. In the shell/command prompt window, run the following command: + +``dotnet publish -r <RID> -c <Configuration>`` + +where ``<Configuration>`` is your project configuration (such as Debug or Release) and ``<RID>`` is theis the runtime identifier, which you specified in the csproj file (one of win-x64, linux-x64, osx-x64). For example, if you want to publish a release configuration of your app for a 64-bit version of Windows the command would look like: + +``dotnet publish -r win-x64 -c release` + +Once completed, you can find the native executable in the root folder of your project under ``/bin/x64/<Configuration>/netcoreapp2.0/publish/`` + +## Try it out! + +Navigate to ``/bin/x64/<Configuration>/netcoreapp2.0/publish/`` in your project folder and run the produced executable. It should display "Now listening on: http://localhost:XXXX" with XXXX being a port on your machine. Open your browser and navigate to that URL. You should see "Hello World!" displayed in your browser. + +Feel free to modify the sample application and experiment. However, keep in mind some functionality might not yet be supported in CoreRT. Let us know on the [Issues page](https://github.com/dotnet/corert/issues/).
\ No newline at end of file diff --git a/samples/WebApi/SampleWebApi.csproj b/samples/WebApi/SampleWebApi.csproj new file mode 100644 index 000000000..1ef94bbd0 --- /dev/null +++ b/samples/WebApi/SampleWebApi.csproj @@ -0,0 +1,19 @@ +<Project Sdk="Microsoft.NET.Sdk.Web"> + + <PropertyGroup> + <TargetFramework>netcoreapp2.0</TargetFramework> + <RdXmlFile>rd.xml</RdXmlFile> + </PropertyGroup> + + <ItemGroup> + <Folder Include="wwwroot\" /> + </ItemGroup> + + <ItemGroup> + <PackageReference Include="Microsoft.AspNetCore" Version="2.0.1" /> + <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.0.1" /> + <PackageReference Include="Microsoft.AspNetCore.Mvc.Formatters.Json" Version="2.0.1" /> + <PackageReference Include="Microsoft.DotNet.ILCompiler" Version="1.0.0-alpha-25929-0" /> + </ItemGroup> + +</Project> diff --git a/samples/WebApi/Startup.cs b/samples/WebApi/Startup.cs new file mode 100644 index 000000000..de86d5c70 --- /dev/null +++ b/samples/WebApi/Startup.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; + +namespace SampleWebApi +{ + public class Startup + { + public Startup(IConfiguration configuration) + { + Configuration = configuration; + } + + public IConfiguration Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.AddMvcCore().AddJsonFormatters(); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IHostingEnvironment env) + { + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseMvc(); + } + } +} diff --git a/samples/WebApi/appsettings.Development.json b/samples/WebApi/appsettings.Development.json new file mode 100644 index 000000000..fa8ce71a9 --- /dev/null +++ b/samples/WebApi/appsettings.Development.json @@ -0,0 +1,10 @@ +{ + "Logging": { + "IncludeScopes": false, + "LogLevel": { + "Default": "Debug", + "System": "Information", + "Microsoft": "Information" + } + } +} diff --git a/samples/WebApi/appsettings.json b/samples/WebApi/appsettings.json new file mode 100644 index 000000000..26bb0ac7a --- /dev/null +++ b/samples/WebApi/appsettings.json @@ -0,0 +1,15 @@ +{ + "Logging": { + "IncludeScopes": false, + "Debug": { + "LogLevel": { + "Default": "Warning" + } + }, + "Console": { + "LogLevel": { + "Default": "Warning" + } + } + } +} diff --git a/samples/WebApi/nuget.config b/samples/WebApi/nuget.config new file mode 100644 index 000000000..c616af0e3 --- /dev/null +++ b/samples/WebApi/nuget.config @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<configuration> + <packageSources> + <!--To inherit the global NuGet package sources remove the <clear/> line below --> + <clear /> + <add key="dotnet-core" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" /> + </packageSources> +</configuration> diff --git a/samples/WebApi/rd.xml b/samples/WebApi/rd.xml new file mode 100644 index 000000000..4183a6ba0 --- /dev/null +++ b/samples/WebApi/rd.xml @@ -0,0 +1,164 @@ +<Directives> + <Application> + <Assembly Name="SampleWebApi" Dynamic="Required All" /> + <Assembly Name="System.Private.CoreLib"> + <Type Name="System.Runtime.CompilerServices.CompilationRelaxationsAttribute" Dynamic="Required All" /> + <Type Name="System.Runtime.CompilerServices.RuntimeCompatibilityAttribute" Dynamic="Required All" /> + <Type Name="System.Runtime.CompilerServices.ExtensionAttribute" Dynamic="Required All" /> + <Type Name="System.Runtime.CompilerServices.IntrinsicAttribute" Dynamic="Required All" /> + <Type Name="System.Diagnostics.DebuggableAttribute" Dynamic="Required All" /> + <Type Name="System.Diagnostics.StackTrace" Dynamic="Required All" /> + <Type Name="System.Reflection.AssemblyInformationalVersionAttribute" Dynamic="Required All" /> + <Type Name="System.Reflection.AssemblyTitleAttribute" Dynamic="Required All" /> + <Type Name="System.Reflection.AssemblyFileVersionAttribute" Dynamic="Required All" /> + <Type Name="System.Reflection.AssemblyDescriptionAttribute" Dynamic="Required All" /> + <Type Name="System.Reflection.AssemblyCompanyAttribute" Dynamic="Required All" /> + <Type Name="System.Reflection.AssemblyCopyrightAttribute" Dynamic="Required All" /> + <Type Name="System.Reflection.AssemblyProductAttribute" Dynamic="Required All" /> + <Type Name="System.Reflection.AssemblyDefaultAliasAttribute" Dynamic="Required All" /> + <Type Name="System.Reflection.AssemblyMetadataAttribute" Dynamic="Required All" /> + <Type Name="System.AttributeUsageAttribute" Dynamic="Required All" /> + <Type Name="System.AttributeUsageAttribute[]" Dynamic="Required All" /> + <Type Name="System.Runtime.InteropServices.ComVisibleAttribute" Dynamic="Required All" /> + <Type Name="System.CLSCompliantAttribute" Dynamic="Required All" /> + <Type Name="System.Reflection.Assembly" Dynamic="Required All" /> + <Type Name="System.RuntimeExceptionHelpers+ExceptionData" Dynamic="Required All" /> + <Type Name="System.Func`2[System.Object,System.Object]" Dynamic="Required All" /> + <Type Name="System.Func`2[System.Reflection.MethodInfo,System.Boolean]" Dynamic="Required All" /> + <Type Name="System.Func`3[System.Object,System.Object,System.Object]" Dynamic="Required All" /> + <Type Name="System.Func`4[[System.Collections.Generic.IDictionary`2[System.Object,System.Object]],System.Object,System.Object,System.Boolean]" Dynamic="Required All" /> + <Type Name="System.Func`5[[System.Linq.Expressions.Expression,System.Linq.Expressions],System.String,System.Boolean,System.Collections.ObjectModel.ReadOnlyCollection`1[[System.Linq.Expressions.ParameterExpression,System.Linq.Expressions]],[System.Linq.Expressions.LambdaExpression,System.Linq.Expressions]]" Dynamic="Required All" /> + <Type Name="System.Action`3[[System.Collections.Generic.IDictionary`2[System.Object,System.Object]],System.Object,System.Object]" Dynamic="Required All" /> + <Type Name="System.Action`3[[System.Collections.Generic.IDictionary`2[System.Object,System.Object]],System.Object,System.Object]" Dynamic="Required All" /> + <Type Name="System.Action`2[System.Object,System.Boolean]" Dynamic="Required All" /> + <Type Name="System.Action`1[System.Object]" Dynamic="Required All" /> + <Type Name="System.Tuple`3[System.Object,System.Object,System.Boolean]" Dynamic="Required All" /> + <Type Name="System.Runtime.CompilerServices.CompilerGeneratedAttribute" Dynamic="Required All" /> + <Type Name="System.ComponentModel.DefaultValueAttribute" Dynamic="Required All" /> + <Type Name="System.ComponentModel.DefaultValueAttribute[]" Dynamic="Required All" /> + <Type Name="System.Reflection.DefaultMemberAttribute" Dynamic="Required All" /> + <Type Name="System.Reflection.DefaultMemberAttribute[]" Dynamic="Required All" /> + <Type Name="System.Reflection.MethodInfo" Dynamic="Required All" /> + <Type Name="System.Reflection.MethodInfo[]" Dynamic="Required All" /> + <Type Name="System.Collections.Generic.KeyValuePair`2[System.Object,System.Object]" Dynamic="Required All" /> + </Assembly> + <Assembly Name="System.Collections"> + <Type Name="System.Collections.Generic.Dictionary`2[[System.Object,System.Private.CoreLib],[System.Object,System.Private.CoreLib]]" Dynamic="Required All" /> + </Assembly> + <Assembly Name="System.Diagnostics.Tracing"> + <Type Name="System.Diagnostics.Tracing.EventSourceAttribute" Dynamic="Required All" /> + <Type Name="System.Diagnostics.Tracing.EventSourceAttribute[]" Dynamic="Required All" /> + </Assembly> + <Assembly Name="System.Reflection"> + <Type Name="System.Reflection.Assembly" Dynamic="Required All" /> + </Assembly> + <Assembly Name="Microsoft.AspNetCore.Server.Kestrel.Core"> + <Type Name="Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer" Dynamic="Required All" /> + <Type Name="Microsoft.AspNetCore.Server.Kestrel.Core.Internal.KestrelServerOptionsSetup" Dynamic="Required All" /> + </Assembly> + <Assembly Name="Microsoft.AspNetCore.Server.Kestrel" Dynamic="Required All"/> + <Assembly Name="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv"> + <Type Name="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.LibuvTransportFactory" Dynamic="Required All" /> + <Type Name="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.LibuvTransportOptions" Dynamic="Required All" /> + </Assembly> + <Assembly Name="Microsoft.Extensions.DependencyInjection" Dynamic="Required All"> + <Type Name="Microsoft.Extensions.DependencyInjection.DefaultServiceProviderFactory" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteExpressionBuilder" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteValidator" Dynamic="Required All" /> + </Assembly> + <Assembly Name="Microsoft.Extensions.Options"> + <Type Name="Microsoft.Extensions.Options.OptionsManager`1[[Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerOptions,Microsoft.AspNetCore.Server.Kestrel.Core]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.OptionsFactory`1[[Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerOptions,Microsoft.AspNetCore.Server.Kestrel.Core]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.IConfigureOptions`1[[Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerOptions,Microsoft.AspNetCore.Server.Kestrel.Core]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.IConfigureOptions`1[[Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerOptions,Microsoft.AspNetCore.Server.Kestrel.Core]][]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.IConfigureOptions`1[[Microsoft.AspNetCore.Http.Features.FormOptions,Microsoft.AspNetCore.Http]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.IConfigureOptions`1[[Microsoft.AspNetCore.Http.Features.FormOptions,Microsoft.AspNetCore.Http]][]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.OptionsManager`1[[Microsoft.AspNetCore.Http.Features.FormOptions,Microsoft.AspNetCore.Http]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.OptionsManager`1[[Microsoft.AspNetCore.Http.Features.FormOptions,Microsoft.AspNetCore.Http]][]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.OptionsFactory`1[[Microsoft.AspNetCore.Http.Features.FormOptions,Microsoft.AspNetCore.Http]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.OptionsMonitor`1[[System.Object,System.Private.CoreLib]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.IOptionsSnapshot`1[[System.Object,System.Private.CoreLib]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.OptionsFactory`1[[System.Object,System.Private.CoreLib]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.OptionsCache`1[[System.Object,System.Private.CoreLib]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.OptionsManager`1[[Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.LibuvTransportOptions,Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.OptionsFactory`1[[Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.LibuvTransportOptions,Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.OptionsManager`1[[Microsoft.AspNetCore.Mvc.MvcOptions,Microsoft.AspNetCore.Mvc.Core]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.OptionsManager`1[[Microsoft.AspNetCore.Mvc.MvcJsonOptions,Microsoft.AspNetCore.Mvc.Formatters.Json]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.OptionsManager`1[[Microsoft.AspNetCore.Authorization.AuthorizationOptions,Microsoft.AspNetCore.Authorization]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.OptionsManager`1[[Microsoft.AspNetCore.Routing.RouteOptions,Microsoft.AspNetCore.Routing]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.OptionsFactory`1[[Microsoft.AspNetCore.Routing.RouteOptions,Microsoft.AspNetCore.Routing]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.OptionsMonitor`1[[Microsoft.Extensions.Logging.Console.ConsoleLoggerOptions,Microsoft.Extensions.Logging.Console]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.OptionsFactory`1[[Microsoft.Extensions.Logging.Console.ConsoleLoggerOptions,Microsoft.Extensions.Logging.Console]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.OptionsMonitor`1[[Microsoft.Extensions.Logging.LoggerFilterOptions,Microsoft.Extensions.Logging]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Options.OptionsFactory`1[[Microsoft.Extensions.Logging.LoggerFilterOptions,Microsoft.Extensions.Logging]]" Dynamic="Required All" /> + </Assembly> + <Assembly Name="Microsoft.AspNetCore.Http.Abstractions"> + <Type Name="Microsoft.AspNetCore.Http.RequestDelegate" Dynamic="Required All" /> + </Assembly> + <Assembly Name="Microsoft.AspNetCore.Mvc.Core" Dynamic="Required All" /> + <Assembly Name="Microsoft.AspNetCore.Routing"> + <Type Name="Microsoft.AspNetCore.Routing.Internal.RoutingMarkerService" Dynamic="Required All" /> + <Type Name="Microsoft.AspNetCore.Builder.RouterMiddleware" Dynamic="Required All" /> + <Type Name="Microsoft.AspNetCore.Routing.Tree.TreeRouteBuilder" Dynamic="Required All" /> + <Type Name="Microsoft.AspNetCore.Routing.DefaultInlineConstraintResolver" Dynamic="Required All" /> + <Type Name="Microsoft.AspNetCore.Routing.RouteOptions" Dynamic="Required All" /> + </Assembly> + <Assembly Name="Microsoft.AspNetCore.Mvc.Formatters.Json"> + <Type Name="Microsoft.AspNetCore.Mvc.Formatters.Json.Internal.MvcJsonMvcOptionsSetup" Dynamic="Required All" /> + <Type Name="Microsoft.AspNetCore.Mvc.MvcJsonOptions" Dynamic="Required All" /> + </Assembly> + <Assembly Name="Microsoft.AspNetCore.Authorization"> + <Type Name="Microsoft.AspNetCore.Authorization.DefaultAuthorizationPolicyProvider" Dynamic="Required All" /> + <Type Name="Microsoft.AspNetCore.Authorization.AuthorizationOptions" Dynamic="Required All" /> + </Assembly> + <Assembly Name="Microsoft.AspNetCore.Http"> + <Type Name="Microsoft.AspNetCore.Http.HttpContextFactory" Dynamic="Required All" /> + </Assembly> + <Assembly Name="Microsoft.AspNetCore.Hosting" Dynamic="Required All"> + <Type Name="Microsoft.AspNetCore.Hosting.Internal.ApplicationLifetime" Dynamic="Required All" /> + </Assembly> + <Assembly Name="Microsoft.Extensions.Logging.Abstractions"> + <Type Name="Microsoft.Extensions.Logging.ILogger`1[[Microsoft.AspNetCore.Hosting.Internal.WebHost,Microsoft.AspNetCore.Hosting]]" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Logging.Logger`1[[Microsoft.AspNetCore.Hosting.Internal.WebHost,Microsoft.AspNetCore.Hosting]]" Dynamic="Required All" /> + </Assembly> + <Assembly Name="Microsoft.Extensions.Logging"> + <Type Name="Microsoft.Extensions.Logging.LoggerFactory" Dynamic="Required All" /> + </Assembly> + <Assembly Name="Microsoft.Extensions.Logging.Console"> + <Type Name="Microsoft.Extensions.Logging.Console.ConsoleLoggerProvider" Dynamic="Required All" /> + </Assembly> + <Assembly Name="Microsoft.Extensions.Logging.Debug"> + <Type Name="Microsoft.Extensions.Logging.Debug.DebugLogger" Dynamic="Required All" /> + <Type Name="Microsoft.Extensions.Logging.Debug.DebugLoggerProvider" Dynamic="Required All" /> + </Assembly> + <Assembly Name="System.Runtime"> + <Type Name="System.Collections.Generic.IEnumerable`1[[System.Diagnostics.Tracing.EventSourceAttribute,System.Diagnostics.Tracing]]" Dynamic="Required All" /> + <Type Name="System.Collections.Generic.IList`1[[System.Diagnostics.Tracing.EventSourceAttribute,System.Diagnostics.Tracing]]" Dynamic="Required All" /> + <Type Name="System.Collections.Generic.IReadOnlyCollection`1[[System.Diagnostics.Tracing.EventSourceAttribute,System.Diagnostics.Tracing]]" Dynamic="Required All" /> + <Type Name="System.Collections.Generic.IReadOnlyList`1[[System.Diagnostics.Tracing.EventSourceAttribute,System.Diagnostics.Tracing]]" Dynamic="Required All" /> + <Type Name="System.Collections.Generic.IEnumerator`1[[System.Diagnostics.Tracing.EventSourceAttribute,System.Diagnostics.Tracing]]" Dynamic="Required All" /> + <Type Name="System.Collections.Generic.IEnumerable`1[[Microsoft.Extensions.Options.IConfigureOptions`1[[Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerOptions,Microsoft.AspNetCore.Server.Kestrel.Core]],Microsoft.Extensions.Options]]" Dynamic="Required All" /> + <Type Name="System.Collections.Generic.IEnumerable`1[[Microsoft.Extensions.Options.IConfigureOptions`1[[Microsoft.AspNetCore.Http.Features.FormOptions,Microsoft.AspNetCore.Http]],Microsoft.Extensions.Options]]" Dynamic="Required All" /> + </Assembly> + <Assembly Name="System.Linq.Expressions"> + <Type Name="System.Linq.Expressions.ExpressionCreator`1[[Newtonsoft.Json.Serialization.ObjectConstructor`1[[System.Object,System.Private.CoreLib]],Newtonsoft.Json]]" Dynamic="Required All" /> + <Type Name="System.Linq.Expressions.ExpressionCreator`1[[System.Func`2[[System.Object,System.Private.CoreLib],[System.Object,System.Private.CoreLib]],System.Private.CoreLib]]" Dynamic="Required All" /> + </Assembly> + <Assembly Name="Microsoft.Extensions.ObjectPool"> + <Type Name="Microsoft.Extensions.ObjectPool.DefaultObjectPoolProvider" Dynamic="Required All" /> + </Assembly> + <Assembly Name="Newtonsoft.Json"> + <Type Name="Newtonsoft.Json.Serialization.ObjectConstructor`1[[System.Object,System.Private.CoreLib]]" Dynamic="Required All" /> + </Assembly> + <Assembly Name="System.ComponentModel.TypeConverter"> + <Type Name="System.ComponentModel.TypeConverter" Dynamic="Required All" /> + <Type Name="System.ComponentModel.StringConverter" Dynamic="Required All" /> + <Type Name="System.ComponentModel.BooleanConverter" Dynamic="Required All" /> + <Type Name="System.ComponentModel.Int32Converter" Dynamic="Required All" /> + </Assembly> + <Assembly Name="Microsoft.Extensions.Configuration.Json"> + <Type Name="Microsoft.Extensions.Configuration.Json.JsonConfigurationSource" Dynamic="Required All" /> + </Assembly> + </Application> +</Directives>
\ No newline at end of file |