@ -0,0 +1,6 @@ | |||
eShopOnContainers Knowledge Base | |||
================================ | |||
This folder contains a set of posts created mostly from [issues on the repo](https://github.com/dotnet-architecture/eShopOnContainers/issues), in order to offer a brief introduction as well as links to deepen the knowledge on a given subject related to the application. | |||
[Simplified CQRS and DDD](simplified-cqrs-ddd/post.md) |
@ -0,0 +1,93 @@ | |||
Simplified CQRS and DDD | |||
======================= | |||
CQRS, for Command and Query Responsibility Segregation, is an architectural pattern that, in very simple terms, has two different ways to handle the application model. | |||
**Commands** are responsible for **changing** the application state, i.e. creating, updating and deleting entities (data). | |||
**Queries** are responsible for **reading** the application state, e.g. to display information to the user. | |||
**Commands** are made thinking about the Domain rules, restrictions and transaction boundaries. | |||
**Queries** are made thinking about the presentation layer, the client UI. | |||
When handling **commands**, the application model is usually represented by DDD constructs, e.g. Root aggregates, entities, value objects, etc., and there are usually some sort of rules that restrict the allowed state changes, e.g. An order has to be paid before dispatching. | |||
When handling **queries**, the application model is usually represented by entities and relations and can be read much like SQL queries to display information. | |||
Queries don't change state, so they can be run as much as required and will always return the same values (as long as the application state hasn't changed), i.e. queries are "idempotent". | |||
Why the separation? because the rules for **changing** the model can impose unnecessary constraints for **reading** the model, e.g. you might allow to change order items only before dispatching so the order is like the gate-keeper (root aggregate) to access the order items, but you might also want to view all orders for some catalog item, so you have to be able to access the order items first (in a read only way). | |||
In this simplified CQRS approach both the DDD model and the query model use the same database. | |||
**Commands** and **Queries** are located in the Application layer, because: | |||
1. It's where the composition of domain root aggregates occur (commands) and | |||
2. It's close to the UI requirements and has access to the whole database of the microservice (queries). | |||
Ideally, root aggregates are ignorant of each other and it's the Application layer's responsibility to compose coordinated actions by means of domain events, because it knows about all root aggregates. | |||
Regarding **queries**, in a similar analysis, the Application layer knows about all entities and relationships in the database, beyond the restrictions of the root aggregates. | |||
Code | |||
---- | |||
### CQRS | |||
The CQRS pattern can be checked in the Ordering service: | |||
Commands and queries are clearly separated in the application layer (Ordering.API). | |||
**Solution Explorer [Ordering.API]:** | |||
![](devenv_2018-05-22_18-00-24.png) | |||
Commands are basically read only Data Transfer Objects (DTO) that contain all data that's required to execute the operation. | |||
**CreateOrderCommand:** | |||
![](devenv_2018-05-22_18-13-35.png) | |||
Each command has a specific command handler that's responsible for executing the operations intended for the command. | |||
**CreateOrderCommandHandler:** | |||
![](devenv_2018-05-22_18-22-23.png) | |||
In this case: | |||
1. Creates an Order object (root aggregate) | |||
2. Adds the order items using the root aggregate method | |||
3. Adds the order through the repository | |||
4. Saves the order | |||
Queries, on the other hand, just return whatever the UI needs, could be a domain object or collections of specific DTOs. | |||
**IOrderQueries:** | |||
![](devenv_2018-05-22_18-40-25.png) | |||
And they are implemented as plain SQL queries, in this case using [Dapper](http://dapper-tutorial.net/ as the ORM. | |||
**OrderQueries:** | |||
![](devenv_2018-05-22_18-48-36.png) | |||
There can even be specific ViewModels or DTOs just to get the query results. | |||
**OrderViewModel:** | |||
![](devenv_2018-05-22_19-11-30.png) | |||
### DDD | |||
The DDD pattern can be checked in the domain layer (Ordering.Domain) | |||
**Solution Explorer [Ordering.Domain + Ordering.Infrastructure]:** | |||
![](devenv_2018-05-22_18-52-58.png) | |||
There you can see the Buyer aggregate and the Order aggregate, as well as the repository implementations in Ordering.Infrastructure. | |||
Command handlers from the application layer use the root aggregates from the Domain layer and the repository implementations from the Infrastructure layer, the latter through Dependency Injection. | |||
Further reading | |||
--------------- | |||
* **Issue #592 - [Question] Ordering Queries** <br/> https://github.com/dotnet-architecture/eShopOnContainers/issues/592 | |||
* **Applying simplified CQRS and DDD patterns in a microservice** <br/> | |||
https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns | |||
@ -1,5 +1,5 @@ | |||
{ | |||
"sdk": { | |||
"version": "2.1.4" | |||
"version": "2.1.300" | |||
} | |||
} |
@ -0,0 +1,49 @@ | |||
using Microsoft.AspNetCore.Authentication; | |||
using Microsoft.AspNetCore.Http; | |||
using System.Collections.Generic; | |||
using System.Net.Http; | |||
using System.Net.Http.Headers; | |||
using System.Threading; | |||
using System.Threading.Tasks; | |||
namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Infrastructure | |||
{ | |||
public class HttpClientAuthorizationDelegatingHandler | |||
: DelegatingHandler | |||
{ | |||
private readonly IHttpContextAccessor _httpContextAccesor; | |||
public HttpClientAuthorizationDelegatingHandler(IHttpContextAccessor httpContextAccesor) | |||
{ | |||
_httpContextAccesor = httpContextAccesor; | |||
} | |||
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) | |||
{ | |||
var authorizationHeader = _httpContextAccesor.HttpContext | |||
.Request.Headers["Authorization"]; | |||
if (!string.IsNullOrEmpty(authorizationHeader)) | |||
{ | |||
request.Headers.Add("Authorization", new List<string>() { authorizationHeader }); | |||
} | |||
var token = await GetToken(); | |||
if (token != null) | |||
{ | |||
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token); | |||
} | |||
return await base.SendAsync(request, cancellationToken); | |||
} | |||
async Task<string> GetToken() | |||
{ | |||
const string ACCESS_TOKEN = "access_token"; | |||
return await _httpContextAccesor.HttpContext | |||
.GetTokenAsync(ACCESS_TOKEN); | |||
} | |||
} | |||
} |
@ -1,53 +1,41 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Threading.Tasks; | |||
using Microsoft.AspNetCore.Authentication; | |||
using Microsoft.AspNetCore.Http; | |||
using Microsoft.eShopOnContainers.BuildingBlocks.Resilience.Http; | |||
using Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Config; | |||
using Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Models; | |||
using Microsoft.Extensions.Logging; | |||
using Microsoft.Extensions.Options; | |||
using Newtonsoft.Json; | |||
using Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Config; | |||
using Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Models; | |||
using System.Net.Http; | |||
using System.Threading.Tasks; | |||
namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Services | |||
{ | |||
public class BasketService : IBasketService | |||
{ | |||
private readonly IHttpClient _apiClient; | |||
private readonly HttpClient _httpClient; | |||
private readonly ILogger<BasketService> _logger; | |||
private readonly UrlsConfig _urls; | |||
private readonly IHttpContextAccessor _httpContextAccessor; | |||
public BasketService(IHttpClient httpClient, IHttpContextAccessor httpContextAccessor, ILogger<BasketService> logger, IOptionsSnapshot<UrlsConfig> config) | |||
public BasketService(HttpClient httpClient, ILogger<BasketService> logger, IOptions<UrlsConfig> config) | |||
{ | |||
_apiClient = httpClient; | |||
_httpClient = httpClient; | |||
_logger = logger; | |||
_urls = config.Value; | |||
_httpContextAccessor = httpContextAccessor; | |||
} | |||
public async Task<BasketData> GetById(string id) | |||
{ | |||
var token = await GetUserTokenAsync(); | |||
var data = await _apiClient.GetStringAsync(_urls.Basket + UrlsConfig.BasketOperations.GetItemById(id), token); | |||
var data = await _httpClient.GetStringAsync(_urls.Basket + UrlsConfig.BasketOperations.GetItemById(id)); | |||
var basket = !string.IsNullOrEmpty(data) ? JsonConvert.DeserializeObject<BasketData>(data) : null; | |||
return basket; | |||
} | |||
public async Task Update(BasketData currentBasket) | |||
{ | |||
var token = await GetUserTokenAsync(); | |||
var data = await _apiClient.PostAsync<BasketData>(_urls.Basket + UrlsConfig.BasketOperations.UpdateBasket(), currentBasket, token); | |||
int i = 0; | |||
} | |||
var basketContent = new StringContent(JsonConvert.SerializeObject(currentBasket), System.Text.Encoding.UTF8, "application/json"); | |||
async Task<string> GetUserTokenAsync() | |||
{ | |||
var context = _httpContextAccessor.HttpContext; | |||
return await context.GetTokenAsync("access_token"); | |||
var data = await _httpClient.PostAsync(_urls.Basket + UrlsConfig.BasketOperations.UpdateBasket(), basketContent); | |||
} | |||
} | |||
} |
@ -1,43 +1,41 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Threading.Tasks; | |||
using Microsoft.eShopOnContainers.BuildingBlocks.Resilience.Http; | |||
using Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Config; | |||
using Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Models; | |||
using Microsoft.Extensions.Logging; | |||
using Microsoft.Extensions.Options; | |||
using Newtonsoft.Json; | |||
using Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Config; | |||
using Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Models; | |||
using System.Collections.Generic; | |||
using System.Net.Http; | |||
using System.Threading.Tasks; | |||
namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Services | |||
{ | |||
public class CatalogService : ICatalogService | |||
{ | |||
private readonly IHttpClient _apiClient; | |||
private readonly HttpClient _httpClient; | |||
private readonly ILogger<CatalogService> _logger; | |||
private readonly UrlsConfig _urls; | |||
public CatalogService(IHttpClient httpClient, ILogger<CatalogService> logger, IOptionsSnapshot<UrlsConfig> config) | |||
public CatalogService(HttpClient httpClient, ILogger<CatalogService> logger, IOptions<UrlsConfig> config) | |||
{ | |||
_apiClient = httpClient; | |||
_httpClient = httpClient; | |||
_logger = logger; | |||
_urls = config.Value; | |||
} | |||
public async Task<CatalogItem> GetCatalogItem(int id) | |||
{ | |||
var data = await _apiClient.GetStringAsync(_urls.Catalog + UrlsConfig.CatalogOperations.GetItemById(id)); | |||
var item = JsonConvert.DeserializeObject<CatalogItem>(data); | |||
return item; | |||
var stringContent = await _httpClient.GetStringAsync(_urls.Catalog + UrlsConfig.CatalogOperations.GetItemById(id)); | |||
var catalogItem = JsonConvert.DeserializeObject<CatalogItem>(stringContent); | |||
return catalogItem; | |||
} | |||
public async Task<IEnumerable<CatalogItem>> GetCatalogItems(IEnumerable<int> ids) | |||
{ | |||
var data = await _apiClient.GetStringAsync(_urls.Catalog + UrlsConfig.CatalogOperations.GetItemsById(ids)); | |||
var item = JsonConvert.DeserializeObject<CatalogItem[]>(data); | |||
return item; | |||
var stringContent = await _httpClient.GetStringAsync(_urls.Catalog + UrlsConfig.CatalogOperations.GetItemsById(ids)); | |||
var catalogItems = JsonConvert.DeserializeObject<CatalogItem[]>(stringContent); | |||
return catalogItems; | |||
} | |||
} | |||
} |
@ -0,0 +1,49 @@ | |||
using Microsoft.AspNetCore.Authentication; | |||
using Microsoft.AspNetCore.Http; | |||
using System.Collections.Generic; | |||
using System.Net.Http; | |||
using System.Net.Http.Headers; | |||
using System.Threading; | |||
using System.Threading.Tasks; | |||
namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Infrastructure | |||
{ | |||
public class HttpClientAuthorizationDelegatingHandler | |||
: DelegatingHandler | |||
{ | |||
private readonly IHttpContextAccessor _httpContextAccesor; | |||
public HttpClientAuthorizationDelegatingHandler(IHttpContextAccessor httpContextAccesor) | |||
{ | |||
_httpContextAccesor = httpContextAccesor; | |||
} | |||
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) | |||
{ | |||
var authorizationHeader = _httpContextAccesor.HttpContext | |||
.Request.Headers["Authorization"]; | |||
if (!string.IsNullOrEmpty(authorizationHeader)) | |||
{ | |||
request.Headers.Add("Authorization", new List<string>() { authorizationHeader }); | |||
} | |||
var token = await GetToken(); | |||
if (token != null) | |||
{ | |||
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token); | |||
} | |||
return await base.SendAsync(request, cancellationToken); | |||
} | |||
async Task<string> GetToken() | |||
{ | |||
const string ACCESS_TOKEN = "access_token"; | |||
return await _httpContextAccesor.HttpContext | |||
.GetTokenAsync(ACCESS_TOKEN); | |||
} | |||
} | |||
} |
@ -1,53 +1,39 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Threading.Tasks; | |||
using Microsoft.AspNetCore.Authentication; | |||
using Microsoft.AspNetCore.Http; | |||
using Microsoft.eShopOnContainers.BuildingBlocks.Resilience.Http; | |||
using Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Config; | |||
using Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Models; | |||
using Microsoft.Extensions.Logging; | |||
using Microsoft.Extensions.Options; | |||
using Newtonsoft.Json; | |||
using Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Config; | |||
using Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Models; | |||
using System.Net.Http; | |||
using System.Threading.Tasks; | |||
namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services | |||
{ | |||
public class BasketService : IBasketService | |||
{ | |||
private readonly IHttpClient _apiClient; | |||
private readonly HttpClient _apiClient; | |||
private readonly ILogger<BasketService> _logger; | |||
private readonly UrlsConfig _urls; | |||
private readonly IHttpContextAccessor _httpContextAccessor; | |||
public BasketService(IHttpClient httpClient, IHttpContextAccessor httpContextAccessor, ILogger<BasketService> logger, IOptionsSnapshot<UrlsConfig> config) | |||
public BasketService(HttpClient httpClient,ILogger<BasketService> logger, IOptions<UrlsConfig> config) | |||
{ | |||
_apiClient = httpClient; | |||
_logger = logger; | |||
_urls = config.Value; | |||
_httpContextAccessor = httpContextAccessor; | |||
} | |||
public async Task<BasketData> GetById(string id) | |||
{ | |||
var token = await GetUserTokenAsync(); | |||
var data = await _apiClient.GetStringAsync(_urls.Basket + UrlsConfig.BasketOperations.GetItemById(id), token); | |||
var data = await _apiClient.GetStringAsync(_urls.Basket + UrlsConfig.BasketOperations.GetItemById(id)); | |||
var basket = !string.IsNullOrEmpty(data) ? JsonConvert.DeserializeObject<BasketData>(data) : null; | |||
return basket; | |||
} | |||
public async Task Update(BasketData currentBasket) | |||
{ | |||
var token = await GetUserTokenAsync(); | |||
var data = await _apiClient.PostAsync<BasketData>(_urls.Basket + UrlsConfig.BasketOperations.UpdateBasket(), currentBasket, token); | |||
int i = 0; | |||
} | |||
var basketContent = new StringContent(JsonConvert.SerializeObject(currentBasket), System.Text.Encoding.UTF8, "application/json"); | |||
async Task<string> GetUserTokenAsync() | |||
{ | |||
var context = _httpContextAccessor.HttpContext; | |||
return await context.GetTokenAsync("access_token"); | |||
var data = await _apiClient.PostAsync(_urls.Basket + UrlsConfig.BasketOperations.UpdateBasket(), basketContent); | |||
} | |||
} | |||
} |
@ -1,43 +1,42 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Threading.Tasks; | |||
using Microsoft.eShopOnContainers.BuildingBlocks.Resilience.Http; | |||
using Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Config; | |||
using Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Models; | |||
using Microsoft.Extensions.Logging; | |||
using Microsoft.Extensions.Options; | |||
using Newtonsoft.Json; | |||
using Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Config; | |||
using Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Models; | |||
using System.Collections.Generic; | |||
using System.Net.Http; | |||
using System.Threading.Tasks; | |||
namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services | |||
{ | |||
public class CatalogService : ICatalogService | |||
{ | |||
private readonly IHttpClient _apiClient; | |||
private readonly HttpClient _httpClient; | |||
private readonly ILogger<CatalogService> _logger; | |||
private readonly UrlsConfig _urls; | |||
public CatalogService(IHttpClient httpClient, ILogger<CatalogService> logger, IOptionsSnapshot<UrlsConfig> config) | |||
public CatalogService(HttpClient httpClient, ILogger<CatalogService> logger, IOptions<UrlsConfig> config) | |||
{ | |||
_apiClient = httpClient; | |||
_httpClient = httpClient; | |||
_logger = logger; | |||
_urls = config.Value; | |||
} | |||
public async Task<CatalogItem> GetCatalogItem(int id) | |||
{ | |||
var data = await _apiClient.GetStringAsync(_urls.Catalog + UrlsConfig.CatalogOperations.GetItemById(id)); | |||
var item = JsonConvert.DeserializeObject<CatalogItem>(data); | |||
return item; | |||
var stringContent = await _httpClient.GetStringAsync(_urls.Catalog + UrlsConfig.CatalogOperations.GetItemById(id)); | |||
var catalogItem = JsonConvert.DeserializeObject<CatalogItem>(stringContent); | |||
return catalogItem; | |||
} | |||
public async Task<IEnumerable<CatalogItem>> GetCatalogItems(IEnumerable<int> ids) | |||
{ | |||
var data = await _apiClient.GetStringAsync(_urls.Catalog + UrlsConfig.CatalogOperations.GetItemsById(ids)); | |||
var item = JsonConvert.DeserializeObject<CatalogItem[]>(data); | |||
return item; | |||
var stringContent = await _httpClient.GetStringAsync(_urls.Catalog + UrlsConfig.CatalogOperations.GetItemsById(ids)); | |||
var catalogItems = JsonConvert.DeserializeObject<CatalogItem[]>(stringContent); | |||
return catalogItems; | |||
} | |||
} | |||
} |
@ -1,16 +0,0 @@ | |||
using System.Net.Http; | |||
using System.Threading.Tasks; | |||
namespace Microsoft.eShopOnContainers.BuildingBlocks.Resilience.Http | |||
{ | |||
public interface IHttpClient | |||
{ | |||
Task<string> GetStringAsync(string uri, string authorizationToken = null, string authorizationMethod = "Bearer"); | |||
Task<HttpResponseMessage> PostAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer"); | |||
Task<HttpResponseMessage> DeleteAsync(string uri, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer"); | |||
Task<HttpResponseMessage> PutAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer"); | |||
} | |||
} |
@ -1,15 +0,0 @@ | |||
<Project Sdk="Microsoft.NET.Sdk"> | |||
<PropertyGroup> | |||
<TargetFramework>netstandard2.0</TargetFramework> | |||
<RootNamespace>Microsoft.eShopOnContainers.BuildingBlocks.Resilience.Http</RootNamespace> | |||
</PropertyGroup> | |||
<ItemGroup> | |||
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.0.1" /> | |||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="2.0.0" /> | |||
<PackageReference Include="Newtonsoft.Json" Version="11.0.1" /> | |||
<PackageReference Include="Polly" Version="5.8.0" /> | |||
</ItemGroup> | |||
</Project> |
@ -1,191 +0,0 @@ | |||
using Microsoft.Extensions.Logging; | |||
using Newtonsoft.Json; | |||
using Polly; | |||
using Polly.Wrap; | |||
using System; | |||
using System.Collections.Concurrent; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Net; | |||
using System.Net.Http; | |||
using System.Net.Http.Headers; | |||
using System.Threading.Tasks; | |||
using Microsoft.AspNetCore.Http; | |||
namespace Microsoft.eShopOnContainers.BuildingBlocks.Resilience.Http | |||
{ | |||
/// <summary> | |||
/// HttpClient wrapper that integrates Retry and Circuit | |||
/// breaker policies when invoking HTTP services. | |||
/// Based on Polly library: https://github.com/App-vNext/Polly | |||
/// </summary> | |||
public class ResilientHttpClient : IHttpClient | |||
{ | |||
private readonly HttpClient _client; | |||
private readonly ILogger<ResilientHttpClient> _logger; | |||
private readonly Func<string, IEnumerable<Policy>> _policyCreator; | |||
private ConcurrentDictionary<string, PolicyWrap> _policyWrappers; | |||
private readonly IHttpContextAccessor _httpContextAccessor; | |||
public ResilientHttpClient(Func<string, IEnumerable<Policy>> policyCreator, ILogger<ResilientHttpClient> logger, IHttpContextAccessor httpContextAccessor) | |||
{ | |||
_client = new HttpClient(); | |||
_logger = logger; | |||
_policyCreator = policyCreator; | |||
_policyWrappers = new ConcurrentDictionary<string, PolicyWrap>(); | |||
_httpContextAccessor = httpContextAccessor; | |||
} | |||
public Task<HttpResponseMessage> PostAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer") | |||
{ | |||
return DoPostPutAsync(HttpMethod.Post, uri, item, authorizationToken, requestId, authorizationMethod); | |||
} | |||
public Task<HttpResponseMessage> PutAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer") | |||
{ | |||
return DoPostPutAsync(HttpMethod.Put, uri, item, authorizationToken, requestId, authorizationMethod); | |||
} | |||
public Task<HttpResponseMessage> DeleteAsync(string uri, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer") | |||
{ | |||
var origin = GetOriginFromUri(uri); | |||
return HttpInvoker(origin, async () => | |||
{ | |||
var requestMessage = new HttpRequestMessage(HttpMethod.Delete, uri); | |||
SetAuthorizationHeader(requestMessage); | |||
if (authorizationToken != null) | |||
{ | |||
requestMessage.Headers.Authorization = new AuthenticationHeaderValue(authorizationMethod, authorizationToken); | |||
} | |||
if (requestId != null) | |||
{ | |||
requestMessage.Headers.Add("x-requestid", requestId); | |||
} | |||
return await _client.SendAsync(requestMessage); | |||
}); | |||
} | |||
public Task<string> GetStringAsync(string uri, string authorizationToken = null, string authorizationMethod = "Bearer") | |||
{ | |||
var origin = GetOriginFromUri(uri); | |||
return HttpInvoker(origin, async () => | |||
{ | |||
var requestMessage = new HttpRequestMessage(HttpMethod.Get, uri); | |||
SetAuthorizationHeader(requestMessage); | |||
if (authorizationToken != null) | |||
{ | |||
requestMessage.Headers.Authorization = new AuthenticationHeaderValue(authorizationMethod, authorizationToken); | |||
} | |||
var response = await _client.SendAsync(requestMessage); | |||
// raise exception if HttpResponseCode 500 | |||
// needed for circuit breaker to track fails | |||
if (response.StatusCode == HttpStatusCode.InternalServerError) | |||
{ | |||
throw new HttpRequestException(); | |||
} | |||
if (!response.IsSuccessStatusCode) | |||
{ | |||
return null; | |||
} | |||
return await response.Content.ReadAsStringAsync(); | |||
}); | |||
} | |||
private Task<HttpResponseMessage> DoPostPutAsync<T>(HttpMethod method, string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer") | |||
{ | |||
if (method != HttpMethod.Post && method != HttpMethod.Put) | |||
{ | |||
throw new ArgumentException("Value must be either post or put.", nameof(method)); | |||
} | |||
// a new StringContent must be created for each retry | |||
// as it is disposed after each call | |||
var origin = GetOriginFromUri(uri); | |||
return HttpInvoker(origin, async () => | |||
{ | |||
var requestMessage = new HttpRequestMessage(method, uri); | |||
SetAuthorizationHeader(requestMessage); | |||
requestMessage.Content = new StringContent(JsonConvert.SerializeObject(item), System.Text.Encoding.UTF8, "application/json"); | |||
if (authorizationToken != null) | |||
{ | |||
requestMessage.Headers.Authorization = new AuthenticationHeaderValue(authorizationMethod, authorizationToken); | |||
} | |||
if (requestId != null) | |||
{ | |||
requestMessage.Headers.Add("x-requestid", requestId); | |||
} | |||
var response = await _client.SendAsync(requestMessage); | |||
// raise exception if HttpResponseCode 500 | |||
// needed for circuit breaker to track fails | |||
if (response.StatusCode == HttpStatusCode.InternalServerError) | |||
{ | |||
throw new HttpRequestException(); | |||
} | |||
return response; | |||
}); | |||
} | |||
private async Task<T> HttpInvoker<T>(string origin, Func<Task<T>> action) | |||
{ | |||
var normalizedOrigin = NormalizeOrigin(origin); | |||
if (!_policyWrappers.TryGetValue(normalizedOrigin, out PolicyWrap policyWrap)) | |||
{ | |||
policyWrap = Policy.WrapAsync(_policyCreator(normalizedOrigin).ToArray()); | |||
_policyWrappers.TryAdd(normalizedOrigin, policyWrap); | |||
} | |||
// Executes the action applying all | |||
// the policies defined in the wrapper | |||
return await policyWrap.ExecuteAsync(action, new Context(normalizedOrigin)); | |||
} | |||
private static string NormalizeOrigin(string origin) | |||
{ | |||
return origin?.Trim()?.ToLower(); | |||
} | |||
private static string GetOriginFromUri(string uri) | |||
{ | |||
var url = new Uri(uri); | |||
var origin = $"{url.Scheme}://{url.DnsSafeHost}:{url.Port}"; | |||
return origin; | |||
} | |||
private void SetAuthorizationHeader(HttpRequestMessage requestMessage) | |||
{ | |||
var authorizationHeader = _httpContextAccessor.HttpContext.Request.Headers["Authorization"]; | |||
if (!string.IsNullOrEmpty(authorizationHeader)) | |||
{ | |||
requestMessage.Headers.Add("Authorization", new List<string>() { authorizationHeader }); | |||
} | |||
} | |||
} | |||
} |
@ -1,125 +0,0 @@ | |||
using Microsoft.AspNetCore.Http; | |||
using Microsoft.Extensions.Logging; | |||
using Newtonsoft.Json; | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Net; | |||
using System.Net.Http; | |||
using System.Net.Http.Headers; | |||
using System.Threading.Tasks; | |||
namespace Microsoft.eShopOnContainers.BuildingBlocks.Resilience.Http | |||
{ | |||
public class StandardHttpClient : IHttpClient | |||
{ | |||
private HttpClient _client; | |||
private ILogger<StandardHttpClient> _logger; | |||
private readonly IHttpContextAccessor _httpContextAccessor; | |||
public StandardHttpClient(ILogger<StandardHttpClient> logger, IHttpContextAccessor httpContextAccessor) | |||
{ | |||
_client = new HttpClient(); | |||
_logger = logger; | |||
_httpContextAccessor = httpContextAccessor; | |||
} | |||
public async Task<string> GetStringAsync(string uri, string authorizationToken = null, string authorizationMethod = "Bearer") | |||
{ | |||
var requestMessage = new HttpRequestMessage(HttpMethod.Get, uri); | |||
SetAuthorizationHeader(requestMessage); | |||
if (authorizationToken != null) | |||
{ | |||
requestMessage.Headers.Authorization = new AuthenticationHeaderValue(authorizationMethod, authorizationToken); | |||
} | |||
var response = await _client.SendAsync(requestMessage); | |||
if (!response.IsSuccessStatusCode) | |||
{ | |||
return null; | |||
} | |||
return await response.Content.ReadAsStringAsync(); | |||
} | |||
private async Task<HttpResponseMessage> DoPostPutAsync<T>(HttpMethod method, string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer") | |||
{ | |||
if (method != HttpMethod.Post && method != HttpMethod.Put) | |||
{ | |||
throw new ArgumentException("Value must be either post or put.", nameof(method)); | |||
} | |||
// a new StringContent must be created for each retry | |||
// as it is disposed after each call | |||
var requestMessage = new HttpRequestMessage(method, uri); | |||
SetAuthorizationHeader(requestMessage); | |||
requestMessage.Content = new StringContent(JsonConvert.SerializeObject(item), System.Text.Encoding.UTF8, "application/json"); | |||
if (authorizationToken != null) | |||
{ | |||
requestMessage.Headers.Authorization = new AuthenticationHeaderValue(authorizationMethod, authorizationToken); | |||
} | |||
if (requestId != null) | |||
{ | |||
requestMessage.Headers.Add("x-requestid", requestId); | |||
} | |||
var response = await _client.SendAsync(requestMessage); | |||
// raise exception if HttpResponseCode 500 | |||
// needed for circuit breaker to track fails | |||
if (response.StatusCode == HttpStatusCode.InternalServerError) | |||
{ | |||
throw new HttpRequestException(); | |||
} | |||
return response; | |||
} | |||
public async Task<HttpResponseMessage> PostAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer") | |||
{ | |||
return await DoPostPutAsync(HttpMethod.Post, uri, item, authorizationToken, requestId, authorizationMethod); | |||
} | |||
public async Task<HttpResponseMessage> PutAsync<T>(string uri, T item, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer") | |||
{ | |||
return await DoPostPutAsync(HttpMethod.Put, uri, item, authorizationToken, requestId, authorizationMethod); | |||
} | |||
public async Task<HttpResponseMessage> DeleteAsync(string uri, string authorizationToken = null, string requestId = null, string authorizationMethod = "Bearer") | |||
{ | |||
var requestMessage = new HttpRequestMessage(HttpMethod.Delete, uri); | |||
SetAuthorizationHeader(requestMessage); | |||
if (authorizationToken != null) | |||
{ | |||
requestMessage.Headers.Authorization = new AuthenticationHeaderValue(authorizationMethod, authorizationToken); | |||
} | |||
if (requestId != null) | |||
{ | |||
requestMessage.Headers.Add("x-requestid", requestId); | |||
} | |||
return await _client.SendAsync(requestMessage); | |||
} | |||
private void SetAuthorizationHeader(HttpRequestMessage requestMessage) | |||
{ | |||
var authorizationHeader = _httpContextAccessor.HttpContext.Request.Headers["Authorization"]; | |||
if (!string.IsNullOrEmpty(authorizationHeader)) | |||
{ | |||
requestMessage.Headers.Add("Authorization", new List<string>() { authorizationHeader }); | |||
} | |||
} | |||
} | |||
} | |||
@ -1,12 +1,12 @@ | |||
<Project Sdk="Microsoft.NET.Sdk"> | |||
<Project Sdk="Microsoft.NET.Sdk"> | |||
<PropertyGroup> | |||
<TargetFramework>netcoreapp2.0</TargetFramework> | |||
<TargetFramework>netcoreapp2.1</TargetFramework> | |||
</PropertyGroup> | |||
<ItemGroup> | |||
<PackageReference Include="Polly" Version="5.8.0" /> | |||
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.5" /> | |||
<PackageReference Include="Polly" Version="6.0.1" /> | |||
<PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.0" /> | |||
</ItemGroup> | |||
</Project> |
@ -1,232 +1,232 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||
<Import Project="..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\build\netstandard1.0\Xamarin.Forms.props" Condition="Exists('..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\build\netstandard1.0\Xamarin.Forms.props')" /> | |||
<Import Project="..\..\..\..\packages\xunit.core.2.3.1\build\xunit.core.props" Condition="Exists('..\..\..\..\packages\xunit.core.2.3.1\build\xunit.core.props')" /> | |||
<Import Project="..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\build\netstandard2.0\Xamarin.Forms.props" Condition="Exists('..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\build\netstandard2.0\Xamarin.Forms.props')" /> | |||
<Import Project="..\..\..\..\packages\xunit.core.2.3.1\build\xunit.core.props" Condition="Exists('..\..\..\..\packages\xunit.core.2.3.1\build\xunit.core.props')" /> | |||
<PropertyGroup> | |||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | |||
<Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform> | |||
<ProjectGuid>{B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}</ProjectGuid> | |||
<ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> | |||
<OutputType>Exe</OutputType> | |||
<RootNamespace>eShopOnContainers.TestRunner.iOS</RootNamespace> | |||
<IPhoneResourcePrefix>Resources</IPhoneResourcePrefix> | |||
<AssemblyName>eShopOnContainersTestRunneriOS</AssemblyName> | |||
<NuGetPackageImportStamp> | |||
</NuGetPackageImportStamp> | |||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' "> | |||
<DebugSymbols>true</DebugSymbols> | |||
<DebugType>full</DebugType> | |||
<Optimize>false</Optimize> | |||
<OutputPath>bin\iPhoneSimulator\Debug</OutputPath> | |||
<DefineConstants>DEBUG</DefineConstants> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<ConsolePause>false</ConsolePause> | |||
<MtouchArch>x86_64</MtouchArch> | |||
<MtouchLink>None</MtouchLink> | |||
<MtouchDebug>True</MtouchDebug> | |||
<MtouchProfiling>False</MtouchProfiling> | |||
<MtouchFastDev>False</MtouchFastDev> | |||
<MtouchUseLlvm>False</MtouchUseLlvm> | |||
<MtouchUseThumb>False</MtouchUseThumb> | |||
<MtouchEnableBitcode>False</MtouchEnableBitcode> | |||
<OptimizePNGs>True</OptimizePNGs> | |||
<MtouchTlsProvider>Default</MtouchTlsProvider> | |||
<MtouchHttpClientHandler>HttpClientHandler</MtouchHttpClientHandler> | |||
<MtouchFloat32>False</MtouchFloat32> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' "> | |||
<DebugSymbols>false</DebugSymbols> | |||
<DebugType>none</DebugType> | |||
<Optimize>true</Optimize> | |||
<OutputPath>bin\iPhoneSimulator\Release</OutputPath> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<MtouchLink>None</MtouchLink> | |||
<MtouchArch>x86_64</MtouchArch> | |||
<ConsolePause>false</ConsolePause> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' "> | |||
<DebugSymbols>true</DebugSymbols> | |||
<DebugType>full</DebugType> | |||
<Optimize>false</Optimize> | |||
<OutputPath>bin\iPhone\Debug</OutputPath> | |||
<DefineConstants>DEBUG</DefineConstants> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<ConsolePause>false</ConsolePause> | |||
<MtouchArch>ARMv7, ARM64</MtouchArch> | |||
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements> | |||
<CodesignKey>iPhone Developer</CodesignKey> | |||
<MtouchDebug>true</MtouchDebug> | |||
<MtouchLink>None</MtouchLink> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' "> | |||
<DebugSymbols>false</DebugSymbols> | |||
<DebugType>none</DebugType> | |||
<Optimize>true</Optimize> | |||
<OutputPath>bin\iPhone\Release</OutputPath> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements> | |||
<MtouchArch>ARMv7, ARM64</MtouchArch> | |||
<ConsolePause>false</ConsolePause> | |||
<CodesignKey>iPhone Developer</CodesignKey> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Ad-Hoc|iPhone' "> | |||
<DebugType>none</DebugType> | |||
<Optimize>True</Optimize> | |||
<OutputPath>bin\iPhone\Ad-Hoc</OutputPath> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<ConsolePause>False</ConsolePause> | |||
<MtouchArch>ARMv7, ARM64</MtouchArch> | |||
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements> | |||
<BuildIpa>True</BuildIpa> | |||
<CodesignProvision>Automatic:AdHoc</CodesignProvision> | |||
<CodesignKey>iPhone Distribution</CodesignKey> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'AppStore|iPhone' "> | |||
<DebugType>none</DebugType> | |||
<Optimize>True</Optimize> | |||
<OutputPath>bin\iPhone\AppStore</OutputPath> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<ConsolePause>False</ConsolePause> | |||
<MtouchArch>ARMv7, ARM64</MtouchArch> | |||
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements> | |||
<CodesignProvision>Automatic:AppStore</CodesignProvision> | |||
<CodesignKey>iPhone Distribution</CodesignKey> | |||
</PropertyGroup> | |||
<ItemGroup> | |||
<Compile Include="Main.cs" /> | |||
<Compile Include="AppDelegate.cs" /> | |||
<None Include="app.config" /> | |||
<None Include="Info.plist" /> | |||
<Compile Include="Properties\AssemblyInfo.cs" /> | |||
<InterfaceDefinition Include="Resources\LaunchScreen.xib" /> | |||
<None Include="packages.config" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<Reference Include="System" /> | |||
<Reference Include="System.Xml" /> | |||
<Reference Include="System.Core" /> | |||
<Reference Include="Xamarin.Forms.Core, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL"> | |||
<HintPath>..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Xamarin.Forms.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> | |||
<HintPath>..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Xamarin.Forms.Platform.iOS, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL"> | |||
<HintPath>..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Xamarin.Forms.Xaml, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL"> | |||
<HintPath>..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Xamarin.iOS" /> | |||
<Reference Include="System.IO.Compression" /> | |||
<Reference Include="System.Net.Http" /> | |||
<Reference Include="xunit.runner.devices"> | |||
<HintPath>..\..\..\..\packages\xunit.runner.devices.2.3.3\lib\xamarinios10\xunit.runner.devices.dll</HintPath> | |||
</Reference> | |||
<Reference Include="xunit.runner.utility.netstandard15"> | |||
<HintPath>..\..\..\..\packages\xunit.runner.devices.2.3.3\lib\xamarinios10\xunit.runner.utility.netstandard15.dll</HintPath> | |||
</Reference> | |||
<Reference Include="xunit.abstractions"> | |||
<HintPath>..\..\..\..\packages\xunit.abstractions.2.0.1\lib\netstandard1.0\xunit.abstractions.dll</HintPath> | |||
</Reference> | |||
<Reference Include="xunit.assert"> | |||
<HintPath>..\..\..\..\packages\xunit.assert.2.3.1\lib\netstandard1.1\xunit.assert.dll</HintPath> | |||
</Reference> | |||
<Reference Include="xunit.core"> | |||
<HintPath>..\..\..\..\packages\xunit.extensibility.core.2.3.1\lib\netstandard1.1\xunit.core.dll</HintPath> | |||
</Reference> | |||
<Reference Include="xunit.execution.dotnet"> | |||
<HintPath>..\..\..\..\packages\xunit.extensibility.execution.2.3.1\lib\netstandard1.1\xunit.execution.dotnet.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Newtonsoft.Json"> | |||
<HintPath>..\..\..\..\packages\Newtonsoft.Json.10.0.3\lib\netstandard1.3\Newtonsoft.Json.dll</HintPath> | |||
</Reference> | |||
<Reference Include="SlideOverKit"> | |||
<HintPath>..\..\..\..\packages\SlideOverKit.2.1.5\lib\Xamarin.iOS10\SlideOverKit.dll</HintPath> | |||
</Reference> | |||
<Reference Include="SlideOverKit.iOS"> | |||
<HintPath>..\..\..\..\packages\SlideOverKit.2.1.5\lib\Xamarin.iOS10\SlideOverKit.iOS.dll</HintPath> | |||
</Reference> | |||
<Reference Include="IdentityModel"> | |||
<HintPath>..\..\..\..\packages\IdentityModel.3.0.0\lib\netstandard2.0\IdentityModel.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Acr.Support.iOS"> | |||
<HintPath>..\..\..\..\packages\Acr.Support.2.1.0\lib\Xamarin.iOS10\Acr.Support.iOS.dll</HintPath> | |||
</Reference> | |||
<Reference Include="BTProgressHUD"> | |||
<HintPath>..\..\..\..\packages\BTProgressHUD.1.2.0.5\lib\Xamarin.iOS10\BTProgressHUD.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Splat"> | |||
<HintPath>..\..\..\..\packages\Splat.2.0.0\lib\Xamarin.iOS10\Splat.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Acr.UserDialogs"> | |||
<HintPath>..\..\..\..\packages\Acr.UserDialogs.6.5.1\lib\Xamarin.iOS10\Acr.UserDialogs.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Acr.UserDialogs.Interface"> | |||
<HintPath>..\..\..\..\packages\Acr.UserDialogs.6.5.1\lib\Xamarin.iOS10\Acr.UserDialogs.Interface.dll</HintPath> | |||
</Reference> | |||
<Reference Include="WebP.Touch"> | |||
<HintPath>..\..\..\..\packages\WebP.Touch.1.0.7\lib\Xamarin.iOS10\WebP.Touch.dll</HintPath> | |||
</Reference> | |||
<Reference Include="FFImageLoading"> | |||
<HintPath>..\..\..\..\packages\Xamarin.FFImageLoading.2.3.4\lib\Xamarin.iOS10\FFImageLoading.dll</HintPath> | |||
</Reference> | |||
<Reference Include="FFImageLoading.Platform"> | |||
<HintPath>..\..\..\..\packages\Xamarin.FFImageLoading.2.3.4\lib\Xamarin.iOS10\FFImageLoading.Platform.dll</HintPath> | |||
</Reference> | |||
<Reference Include="FFImageLoading.Forms"> | |||
<HintPath>..\..\..\..\packages\Xamarin.FFImageLoading.Forms.2.3.4\lib\Xamarin.iOS10\FFImageLoading.Forms.dll</HintPath> | |||
</Reference> | |||
<Reference Include="FFImageLoading.Forms.Touch"> | |||
<HintPath>..\..\..\..\packages\Xamarin.FFImageLoading.Forms.2.3.4\lib\Xamarin.iOS10\FFImageLoading.Forms.Touch.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PInvoke.Windows.Core"> | |||
<HintPath>..\..\..\..\packages\PInvoke.Windows.Core.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.Windows.Core.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PInvoke.Kernel32"> | |||
<HintPath>..\..\..\..\packages\PInvoke.Kernel32.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.Kernel32.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PInvoke.BCrypt"> | |||
<HintPath>..\..\..\..\packages\PInvoke.BCrypt.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.BCrypt.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PInvoke.NCrypt"> | |||
<HintPath>..\..\..\..\packages\PInvoke.NCrypt.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.NCrypt.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Validation"> | |||
<HintPath>..\..\..\..\packages\Validation.2.2.8\lib\dotnet\Validation.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PCLCrypto"> | |||
<HintPath>..\..\..\..\packages\PCLCrypto.2.0.147\lib\xamarinios10\PCLCrypto.dll</HintPath> | |||
</Reference> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<Content Include="Entitlements.plist" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="..\eShopOnContainers.UnitTests\eShopOnContainers.UnitTests.csproj"> | |||
<Project>{FDD910BC-DF0F-483D-B7D5-C7D831855172}</Project> | |||
<Name>eShopOnContainers.UnitTests</Name> | |||
</ProjectReference> | |||
</ItemGroup> | |||
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" /> | |||
<Import Project="..\..\..\..\packages\xunit.runner.devices.2.3.3\build\xamarinios10\xunit.runner.devices.targets" Condition="Exists('..\..\..\..\packages\xunit.runner.devices.2.3.3\build\xamarinios10\xunit.runner.devices.targets')" /> | |||
<Import Project="..\..\..\..\packages\xunit.core.2.3.1\build\xunit.core.targets" Condition="Exists('..\..\..\..\packages\xunit.core.2.3.1\build\xunit.core.targets')" /> | |||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> | |||
<PropertyGroup> | |||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | |||
<Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform> | |||
<ProjectGuid>{B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}</ProjectGuid> | |||
<ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> | |||
<OutputType>Exe</OutputType> | |||
<RootNamespace>eShopOnContainers.TestRunner.iOS</RootNamespace> | |||
<IPhoneResourcePrefix>Resources</IPhoneResourcePrefix> | |||
<AssemblyName>eShopOnContainersTestRunneriOS</AssemblyName> | |||
<NuGetPackageImportStamp> | |||
</NuGetPackageImportStamp> | |||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> | |||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' "> | |||
<DebugSymbols>true</DebugSymbols> | |||
<DebugType>full</DebugType> | |||
<Optimize>false</Optimize> | |||
<OutputPath>bin\iPhoneSimulator\Debug</OutputPath> | |||
<DefineConstants>DEBUG</DefineConstants> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<ConsolePause>false</ConsolePause> | |||
<MtouchArch>x86_64</MtouchArch> | |||
<MtouchLink>None</MtouchLink> | |||
<MtouchDebug>True</MtouchDebug> | |||
<MtouchProfiling>False</MtouchProfiling> | |||
<MtouchFastDev>False</MtouchFastDev> | |||
<MtouchUseLlvm>False</MtouchUseLlvm> | |||
<MtouchUseThumb>False</MtouchUseThumb> | |||
<MtouchEnableBitcode>False</MtouchEnableBitcode> | |||
<OptimizePNGs>True</OptimizePNGs> | |||
<MtouchTlsProvider>Default</MtouchTlsProvider> | |||
<MtouchHttpClientHandler>HttpClientHandler</MtouchHttpClientHandler> | |||
<MtouchFloat32>False</MtouchFloat32> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' "> | |||
<DebugSymbols>false</DebugSymbols> | |||
<DebugType>none</DebugType> | |||
<Optimize>true</Optimize> | |||
<OutputPath>bin\iPhoneSimulator\Release</OutputPath> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<MtouchLink>None</MtouchLink> | |||
<MtouchArch>x86_64</MtouchArch> | |||
<ConsolePause>false</ConsolePause> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' "> | |||
<DebugSymbols>true</DebugSymbols> | |||
<DebugType>full</DebugType> | |||
<Optimize>false</Optimize> | |||
<OutputPath>bin\iPhone\Debug</OutputPath> | |||
<DefineConstants>DEBUG</DefineConstants> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<ConsolePause>false</ConsolePause> | |||
<MtouchArch>ARMv7, ARM64</MtouchArch> | |||
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements> | |||
<CodesignKey>iPhone Developer</CodesignKey> | |||
<MtouchDebug>true</MtouchDebug> | |||
<MtouchLink>None</MtouchLink> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' "> | |||
<DebugSymbols>false</DebugSymbols> | |||
<DebugType>none</DebugType> | |||
<Optimize>true</Optimize> | |||
<OutputPath>bin\iPhone\Release</OutputPath> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements> | |||
<MtouchArch>ARMv7, ARM64</MtouchArch> | |||
<ConsolePause>false</ConsolePause> | |||
<CodesignKey>iPhone Developer</CodesignKey> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Ad-Hoc|iPhone' "> | |||
<DebugType>none</DebugType> | |||
<Optimize>True</Optimize> | |||
<OutputPath>bin\iPhone\Ad-Hoc</OutputPath> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<ConsolePause>False</ConsolePause> | |||
<MtouchArch>ARMv7, ARM64</MtouchArch> | |||
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements> | |||
<BuildIpa>True</BuildIpa> | |||
<CodesignProvision>Automatic:AdHoc</CodesignProvision> | |||
<CodesignKey>iPhone Distribution</CodesignKey> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'AppStore|iPhone' "> | |||
<DebugType>none</DebugType> | |||
<Optimize>True</Optimize> | |||
<OutputPath>bin\iPhone\AppStore</OutputPath> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<ConsolePause>False</ConsolePause> | |||
<MtouchArch>ARMv7, ARM64</MtouchArch> | |||
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements> | |||
<CodesignProvision>Automatic:AppStore</CodesignProvision> | |||
<CodesignKey>iPhone Distribution</CodesignKey> | |||
</PropertyGroup> | |||
<ItemGroup> | |||
<Compile Include="Main.cs" /> | |||
<Compile Include="AppDelegate.cs" /> | |||
<None Include="app.config" /> | |||
<None Include="Info.plist" /> | |||
<Compile Include="Properties\AssemblyInfo.cs" /> | |||
<InterfaceDefinition Include="Resources\LaunchScreen.xib" /> | |||
<None Include="packages.config" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<Reference Include="System" /> | |||
<Reference Include="System.Xml" /> | |||
<Reference Include="System.Core" /> | |||
<Reference Include="Xamarin.Forms.Core, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL"> | |||
<HintPath>..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Xamarin.Forms.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> | |||
<HintPath>..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Xamarin.Forms.Platform.iOS, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL"> | |||
<HintPath>..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Xamarin.Forms.Xaml, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL"> | |||
<HintPath>..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Xamarin.iOS" /> | |||
<Reference Include="System.IO.Compression" /> | |||
<Reference Include="System.Net.Http" /> | |||
<Reference Include="xunit.runner.devices"> | |||
<HintPath>..\..\..\..\packages\xunit.runner.devices.2.3.3\lib\xamarinios10\xunit.runner.devices.dll</HintPath> | |||
</Reference> | |||
<Reference Include="xunit.runner.utility.netstandard15"> | |||
<HintPath>..\..\..\..\packages\xunit.runner.devices.2.3.3\lib\xamarinios10\xunit.runner.utility.netstandard15.dll</HintPath> | |||
</Reference> | |||
<Reference Include="xunit.abstractions"> | |||
<HintPath>..\..\..\..\packages\xunit.abstractions.2.0.1\lib\netstandard1.0\xunit.abstractions.dll</HintPath> | |||
</Reference> | |||
<Reference Include="xunit.assert"> | |||
<HintPath>..\..\..\..\packages\xunit.assert.2.3.1\lib\netstandard1.1\xunit.assert.dll</HintPath> | |||
</Reference> | |||
<Reference Include="xunit.core"> | |||
<HintPath>..\..\..\..\packages\xunit.extensibility.core.2.3.1\lib\netstandard1.1\xunit.core.dll</HintPath> | |||
</Reference> | |||
<Reference Include="xunit.execution.dotnet"> | |||
<HintPath>..\..\..\..\packages\xunit.extensibility.execution.2.3.1\lib\netstandard1.1\xunit.execution.dotnet.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Newtonsoft.Json"> | |||
<HintPath>..\..\..\..\packages\Newtonsoft.Json.10.0.3\lib\netstandard1.3\Newtonsoft.Json.dll</HintPath> | |||
</Reference> | |||
<Reference Include="SlideOverKit"> | |||
<HintPath>..\..\..\..\packages\SlideOverKit.2.1.5\lib\Xamarin.iOS10\SlideOverKit.dll</HintPath> | |||
</Reference> | |||
<Reference Include="SlideOverKit.iOS"> | |||
<HintPath>..\..\..\..\packages\SlideOverKit.2.1.5\lib\Xamarin.iOS10\SlideOverKit.iOS.dll</HintPath> | |||
</Reference> | |||
<Reference Include="IdentityModel"> | |||
<HintPath>..\..\..\..\packages\IdentityModel.3.0.0\lib\netstandard2.0\IdentityModel.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Acr.Support.iOS"> | |||
<HintPath>..\..\..\..\packages\Acr.Support.2.1.0\lib\Xamarin.iOS10\Acr.Support.iOS.dll</HintPath> | |||
</Reference> | |||
<Reference Include="BTProgressHUD"> | |||
<HintPath>..\..\..\..\packages\BTProgressHUD.1.2.0.5\lib\Xamarin.iOS10\BTProgressHUD.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Splat"> | |||
<HintPath>..\..\..\..\packages\Splat.2.0.0\lib\Xamarin.iOS10\Splat.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Acr.UserDialogs"> | |||
<HintPath>..\..\..\..\packages\Acr.UserDialogs.6.5.1\lib\Xamarin.iOS10\Acr.UserDialogs.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Acr.UserDialogs.Interface"> | |||
<HintPath>..\..\..\..\packages\Acr.UserDialogs.6.5.1\lib\Xamarin.iOS10\Acr.UserDialogs.Interface.dll</HintPath> | |||
</Reference> | |||
<Reference Include="WebP.Touch"> | |||
<HintPath>..\..\..\..\packages\WebP.Touch.1.0.7\lib\Xamarin.iOS10\WebP.Touch.dll</HintPath> | |||
</Reference> | |||
<Reference Include="FFImageLoading"> | |||
<HintPath>..\..\..\..\packages\Xamarin.FFImageLoading.2.3.4\lib\Xamarin.iOS10\FFImageLoading.dll</HintPath> | |||
</Reference> | |||
<Reference Include="FFImageLoading.Platform"> | |||
<HintPath>..\..\..\..\packages\Xamarin.FFImageLoading.2.3.4\lib\Xamarin.iOS10\FFImageLoading.Platform.dll</HintPath> | |||
</Reference> | |||
<Reference Include="FFImageLoading.Forms"> | |||
<HintPath>..\..\..\..\packages\Xamarin.FFImageLoading.Forms.2.3.4\lib\Xamarin.iOS10\FFImageLoading.Forms.dll</HintPath> | |||
</Reference> | |||
<Reference Include="FFImageLoading.Forms.Touch"> | |||
<HintPath>..\..\..\..\packages\Xamarin.FFImageLoading.Forms.2.3.4\lib\Xamarin.iOS10\FFImageLoading.Forms.Touch.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PInvoke.Windows.Core"> | |||
<HintPath>..\..\..\..\packages\PInvoke.Windows.Core.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.Windows.Core.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PInvoke.Kernel32"> | |||
<HintPath>..\..\..\..\packages\PInvoke.Kernel32.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.Kernel32.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PInvoke.BCrypt"> | |||
<HintPath>..\..\..\..\packages\PInvoke.BCrypt.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.BCrypt.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PInvoke.NCrypt"> | |||
<HintPath>..\..\..\..\packages\PInvoke.NCrypt.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.NCrypt.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Validation"> | |||
<HintPath>..\..\..\..\packages\Validation.2.2.8\lib\dotnet\Validation.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PCLCrypto"> | |||
<HintPath>..\..\..\..\packages\PCLCrypto.2.0.147\lib\xamarinios10\PCLCrypto.dll</HintPath> | |||
</Reference> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<Content Include="Entitlements.plist" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="..\eShopOnContainers.UnitTests\eShopOnContainers.UnitTests.csproj"> | |||
<Project>{FDD910BC-DF0F-483D-B7D5-C7D831855172}</Project> | |||
<Name>eShopOnContainers.UnitTests</Name> | |||
</ProjectReference> | |||
</ItemGroup> | |||
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" /> | |||
<Import Project="..\..\..\..\packages\xunit.runner.devices.2.3.3\build\xamarinios10\xunit.runner.devices.targets" Condition="Exists('..\..\..\..\packages\xunit.runner.devices.2.3.3\build\xamarinios10\xunit.runner.devices.targets')" /> | |||
<Import Project="..\..\..\..\packages\xunit.core.2.3.1\build\xunit.core.targets" Condition="Exists('..\..\..\..\packages\xunit.core.2.3.1\build\xunit.core.targets')" /> | |||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> | |||
<PropertyGroup> | |||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> | |||
</PropertyGroup> | |||
<Error Condition="!Exists('..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\build\netstandard1.0\Xamarin.Forms.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\build\netstandard1.0\Xamarin.Forms.props'))" /> | |||
<Error Condition="!Exists('..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\build\netstandard1.0\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\build\netstandard1.0\Xamarin.Forms.targets'))" /> | |||
<Error Condition="!Exists('..\..\..\..\packages\NETStandard.Library.2.0.0\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\NETStandard.Library.2.0.0\build\netstandard2.0\NETStandard.Library.targets'))" /> | |||
</Target> | |||
<Import Project="..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\build\netstandard1.0\Xamarin.Forms.targets" Condition="Exists('..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\build\netstandard1.0\Xamarin.Forms.targets')" /> | |||
<Import Project="..\..\..\..\packages\NETStandard.Library.2.0.0\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\..\..\..\packages\NETStandard.Library.2.0.0\build\netstandard2.0\NETStandard.Library.targets')" /> | |||
<Error Condition="!Exists('..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\build\netstandard2.0\Xamarin.Forms.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\build\netstandard2.0\Xamarin.Forms.props'))" /> | |||
<Error Condition="!Exists('..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\build\netstandard2.0\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\build\netstandard2.0\Xamarin.Forms.targets'))" /> | |||
<Error Condition="!Exists('..\..\..\..\packages\NETStandard.Library.2.0.1\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\NETStandard.Library.2.0.1\build\netstandard2.0\NETStandard.Library.targets'))" /> | |||
</Target> | |||
<Import Project="..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\build\netstandard2.0\Xamarin.Forms.targets" Condition="Exists('..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\build\netstandard2.0\Xamarin.Forms.targets')" /> | |||
<Import Project="..\..\..\..\packages\NETStandard.Library.2.0.1\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\..\..\..\packages\NETStandard.Library.2.0.1\build\netstandard2.0\NETStandard.Library.targets')" /> | |||
</Project> |
@ -1,428 +1,428 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||
<Import Project="..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\build\netstandard1.0\Xamarin.Forms.props" Condition="Exists('..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\build\netstandard1.0\Xamarin.Forms.props')" /> | |||
<Import Project="..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\build\netstandard2.0\Xamarin.Forms.props" Condition="Exists('..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\build\netstandard2.0\Xamarin.Forms.props')" /> | |||
<PropertyGroup> | |||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | |||
<Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform> | |||
<ProductVersion>8.0.30703</ProductVersion> | |||
<SchemaVersion>2.0</SchemaVersion> | |||
<ProjectGuid>{6EEB23DC-7063-4444-9AF8-90DF24F549C0}</ProjectGuid> | |||
<ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> | |||
<OutputType>Exe</OutputType> | |||
<RootNamespace>eShopOnContainers.iOS</RootNamespace> | |||
<IPhoneResourcePrefix>Resources</IPhoneResourcePrefix> | |||
<AssemblyName>eShopOnContainersiOS</AssemblyName> | |||
<NuGetPackageImportStamp> | |||
</NuGetPackageImportStamp> | |||
<SkipValidatePackageReferences>true</SkipValidatePackageReferences> | |||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' "> | |||
<DebugSymbols>true</DebugSymbols> | |||
<DebugType>full</DebugType> | |||
<Optimize>false</Optimize> | |||
<OutputPath>bin\iPhoneSimulator\Debug</OutputPath> | |||
<DefineConstants>DEBUG</DefineConstants> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<ConsolePause>false</ConsolePause> | |||
<MtouchArch>i386, x86_64</MtouchArch> | |||
<MtouchLink>None</MtouchLink> | |||
<MtouchDebug>True</MtouchDebug> | |||
<MtouchProfiling>False</MtouchProfiling> | |||
<MtouchFastDev>False</MtouchFastDev> | |||
<MtouchUseLlvm>False</MtouchUseLlvm> | |||
<MtouchUseThumb>False</MtouchUseThumb> | |||
<MtouchEnableBitcode>False</MtouchEnableBitcode> | |||
<OptimizePNGs>True</OptimizePNGs> | |||
<MtouchTlsProvider>Default</MtouchTlsProvider> | |||
<MtouchHttpClientHandler>HttpClientHandler</MtouchHttpClientHandler> | |||
<MtouchFloat32>False</MtouchFloat32> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' "> | |||
<DebugType>none</DebugType> | |||
<Optimize>true</Optimize> | |||
<OutputPath>bin\iPhoneSimulator\Release</OutputPath> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<MtouchLink>None</MtouchLink> | |||
<MtouchArch>i386, x86_64</MtouchArch> | |||
<ConsolePause>false</ConsolePause> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' "> | |||
<DebugSymbols>true</DebugSymbols> | |||
<DebugType>full</DebugType> | |||
<Optimize>false</Optimize> | |||
<OutputPath>bin\iPhone\Debug</OutputPath> | |||
<DefineConstants>DEBUG</DefineConstants> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<ConsolePause>false</ConsolePause> | |||
<MtouchArch>ARMv7, ARM64</MtouchArch> | |||
<CodesignKey>iPhone Developer</CodesignKey> | |||
<MtouchDebug>true</MtouchDebug> | |||
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements> | |||
<MtouchLink>None</MtouchLink> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' "> | |||
<DebugType>none</DebugType> | |||
<Optimize>true</Optimize> | |||
<OutputPath>bin\iPhone\Release</OutputPath> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<MtouchArch>ARMv7, ARM64</MtouchArch> | |||
<ConsolePause>false</ConsolePause> | |||
<CodesignKey>iPhone Developer</CodesignKey> | |||
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Ad-Hoc|iPhone' "> | |||
<DebugType>none</DebugType> | |||
<Optimize>True</Optimize> | |||
<OutputPath>bin\iPhone\Ad-Hoc</OutputPath> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<ConsolePause>False</ConsolePause> | |||
<MtouchArch>ARMv7, ARM64</MtouchArch> | |||
<BuildIpa>True</BuildIpa> | |||
<CodesignProvision>Automatic:AdHoc</CodesignProvision> | |||
<CodesignKey>iPhone Distribution</CodesignKey> | |||
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'AppStore|iPhone' "> | |||
<DebugType>none</DebugType> | |||
<Optimize>True</Optimize> | |||
<OutputPath>bin\iPhone\AppStore</OutputPath> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<ConsolePause>False</ConsolePause> | |||
<MtouchArch>ARMv7, ARM64</MtouchArch> | |||
<CodesignProvision>Automatic:AppStore</CodesignProvision> | |||
<CodesignKey>iPhone Distribution</CodesignKey> | |||
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements> | |||
</PropertyGroup> | |||
<ItemGroup> | |||
<Compile Include="Effects\EntryLineColorEffect.cs" /> | |||
<Compile Include="Main.cs" /> | |||
<Compile Include="AppDelegate.cs" /> | |||
<BundleResource Include="..\CommonResources\Fonts\Montserrat-Bold.ttf"> | |||
<Link>Resources\fonts\Montserrat-Bold.ttf</Link> | |||
</BundleResource> | |||
<BundleResource Include="..\CommonResources\Fonts\Montserrat-Regular.ttf"> | |||
<Link>Resources\fonts\Montserrat-Regular.ttf</Link> | |||
</BundleResource> | |||
<BundleResource Include="..\CommonResources\Fonts\SourceSansPro-Regular.ttf"> | |||
<Link>Resources\fonts\SourceSansPro-Regular.ttf</Link> | |||
</BundleResource> | |||
<Compile Include="Renderers\CustomTabbedPageRenderer.cs" /> | |||
<Compile Include="Renderers\SlideDownMenuPageRenderer.cs" /> | |||
<None Include="app.config" /> | |||
<None Include="Entitlements.plist" /> | |||
<None Include="Info.plist" /> | |||
<Compile Include="Properties\AssemblyInfo.cs" /> | |||
<ITunesArtwork Include="iTunesArtwork" /> | |||
<ITunesArtwork Include="iTunesArtwork@2x" /> | |||
<Compile Include="Effects\CircleEffect.cs" /> | |||
<BundleResource Include="Resources\menu_campaigns.png" /> | |||
<BundleResource Include="Resources\menu_campaigns%402x.png" /> | |||
<BundleResource Include="Resources\menu_campaigns%403x.png" /> | |||
<None Include="packages.config" /> | |||
<Compile Include="Services\LocationServiceImplementation.cs" /> | |||
<Compile Include="Services\PermissionsService.cs" /> | |||
<Compile Include="Services\GeolocationSingleUpdateDelegate.cs" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Icon-60%403x.png" /> | |||
<BundleResource Include="Resources\Icon-Small-40%403x.png" /> | |||
<BundleResource Include="Resources\Icon-Small%403x.png" /> | |||
<InterfaceDefinition Include="Resources\LaunchScreen.storyboard" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<Reference Include="System" /> | |||
<Reference Include="System.Xml" /> | |||
<Reference Include="System.Core" /> | |||
<Reference Include="Xamarin.Forms.Core, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL"> | |||
<HintPath>..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Xamarin.Forms.Platform, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> | |||
<HintPath>..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Xamarin.Forms.Platform.iOS, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL"> | |||
<HintPath>..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Xamarin.Forms.Xaml, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL"> | |||
<HintPath>..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Xamarin.iOS" /> | |||
<Reference Include="System.IO.Compression" /> | |||
<Reference Include="System.Net.Http" /> | |||
<Reference Include="WebP.Touch"> | |||
<HintPath>..\..\..\..\packages\WebP.Touch.1.0.7\lib\Xamarin.iOS10\WebP.Touch.dll</HintPath> | |||
</Reference> | |||
<Reference Include="FFImageLoading"> | |||
<HintPath>..\..\..\..\packages\Xamarin.FFImageLoading.2.3.4\lib\Xamarin.iOS10\FFImageLoading.dll</HintPath> | |||
</Reference> | |||
<Reference Include="FFImageLoading.Platform"> | |||
<HintPath>..\..\..\..\packages\Xamarin.FFImageLoading.2.3.4\lib\Xamarin.iOS10\FFImageLoading.Platform.dll</HintPath> | |||
</Reference> | |||
<Reference Include="FFImageLoading.Forms"> | |||
<HintPath>..\..\..\..\packages\Xamarin.FFImageLoading.Forms.2.3.4\lib\Xamarin.iOS10\FFImageLoading.Forms.dll</HintPath> | |||
</Reference> | |||
<Reference Include="FFImageLoading.Forms.Touch"> | |||
<HintPath>..\..\..\..\packages\Xamarin.FFImageLoading.Forms.2.3.4\lib\Xamarin.iOS10\FFImageLoading.Forms.Touch.dll</HintPath> | |||
</Reference> | |||
<Reference Include="SlideOverKit"> | |||
<HintPath>..\..\..\..\packages\SlideOverKit.2.1.5\lib\Xamarin.iOS10\SlideOverKit.dll</HintPath> | |||
</Reference> | |||
<Reference Include="SlideOverKit.iOS"> | |||
<HintPath>..\..\..\..\packages\SlideOverKit.2.1.5\lib\Xamarin.iOS10\SlideOverKit.iOS.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Plugin.Settings.Abstractions"> | |||
<HintPath>..\..\..\..\packages\Xam.Plugins.Settings.3.1.1\lib\Xamarin.iOS10\Plugin.Settings.Abstractions.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Plugin.Settings"> | |||
<HintPath>..\..\..\..\packages\Xam.Plugins.Settings.3.1.1\lib\Xamarin.iOS10\Plugin.Settings.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Newtonsoft.Json"> | |||
<HintPath>..\..\..\..\packages\Newtonsoft.Json.10.0.3\lib\netstandard1.3\Newtonsoft.Json.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Acr.Support.iOS"> | |||
<HintPath>..\..\..\..\packages\Acr.Support.2.1.0\lib\Xamarin.iOS10\Acr.Support.iOS.dll</HintPath> | |||
</Reference> | |||
<Reference Include="BTProgressHUD"> | |||
<HintPath>..\..\..\..\packages\BTProgressHUD.1.2.0.5\lib\Xamarin.iOS10\BTProgressHUD.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Splat"> | |||
<HintPath>..\..\..\..\packages\Splat.2.0.0\lib\Xamarin.iOS10\Splat.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Acr.UserDialogs"> | |||
<HintPath>..\..\..\..\packages\Acr.UserDialogs.6.5.1\lib\Xamarin.iOS10\Acr.UserDialogs.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Acr.UserDialogs.Interface"> | |||
<HintPath>..\..\..\..\packages\Acr.UserDialogs.6.5.1\lib\Xamarin.iOS10\Acr.UserDialogs.Interface.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PInvoke.Windows.Core"> | |||
<HintPath>..\..\..\..\packages\PInvoke.Windows.Core.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.Windows.Core.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PInvoke.Kernel32"> | |||
<HintPath>..\..\..\..\packages\PInvoke.Kernel32.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.Kernel32.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PInvoke.BCrypt"> | |||
<HintPath>..\..\..\..\packages\PInvoke.BCrypt.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.BCrypt.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PInvoke.NCrypt"> | |||
<HintPath>..\..\..\..\packages\PInvoke.NCrypt.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.NCrypt.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Validation"> | |||
<HintPath>..\..\..\..\packages\Validation.2.2.8\lib\dotnet\Validation.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PCLCrypto"> | |||
<HintPath>..\..\..\..\packages\PCLCrypto.2.0.147\lib\xamarinios10\PCLCrypto.dll</HintPath> | |||
</Reference> | |||
<Reference Include="IdentityModel"> | |||
<HintPath>..\..\..\..\packages\IdentityModel.3.0.0\lib\netstandard2.0\IdentityModel.dll</HintPath> | |||
</Reference> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\fake_product_01.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\fake_product_03.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\fake_product_02.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\fake_product_04.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\fake_product_05.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\menu_cart.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\menu_cart%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\menu_cart%403x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\menu_filter.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\menu_filter%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\menu_filter%403x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\menu_profile.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\menu_profile%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\menu_profile%403x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\product_add.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\product_add%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\product_add%403x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\app_settings%403x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\app_settings.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\app_settings%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\switchOff.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\switchOff%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\switchOff%403x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\switchOn.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\switchOn%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\switchOn%403x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Contents.json"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-60%402x.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-76.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-76%402x.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-Small.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-Small%402x.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-Small-40.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-Small-40%402x.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\Contents.json"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\Default.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\Default%402x.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\Default-568h%402x.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\Default-Portrait.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\Default-Portrait%402x.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\Default-750%402x.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\Default-1242%403x.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Default.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Logo.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\noimage.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\default_product.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\banner.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Default%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Default-568h%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Default-Portrait.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Default-Portrait%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Icon-60%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Icon-76.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Icon-76%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Icon-Small.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Icon-Small%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Icon-Small-40.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Icon-Small-40%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\fake_campaign_01.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\fake_campaign_02.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<AndroidResource Include="Resources\default_campaign.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="..\eShopOnContainers.Core\eShopOnContainers.Core.csproj"> | |||
<Project>{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}</Project> | |||
<Name>eShopOnContainers.Core</Name> | |||
</ProjectReference> | |||
</ItemGroup> | |||
<ItemGroup /> | |||
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" /> | |||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> | |||
<PropertyGroup> | |||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | |||
<Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform> | |||
<ProductVersion>8.0.30703</ProductVersion> | |||
<SchemaVersion>2.0</SchemaVersion> | |||
<ProjectGuid>{6EEB23DC-7063-4444-9AF8-90DF24F549C0}</ProjectGuid> | |||
<ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> | |||
<OutputType>Exe</OutputType> | |||
<RootNamespace>eShopOnContainers.iOS</RootNamespace> | |||
<IPhoneResourcePrefix>Resources</IPhoneResourcePrefix> | |||
<AssemblyName>eShopOnContainersiOS</AssemblyName> | |||
<NuGetPackageImportStamp> | |||
</NuGetPackageImportStamp> | |||
<SkipValidatePackageReferences>true</SkipValidatePackageReferences> | |||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> | |||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' "> | |||
<DebugSymbols>true</DebugSymbols> | |||
<DebugType>full</DebugType> | |||
<Optimize>false</Optimize> | |||
<OutputPath>bin\iPhoneSimulator\Debug</OutputPath> | |||
<DefineConstants>DEBUG</DefineConstants> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<ConsolePause>false</ConsolePause> | |||
<MtouchArch>i386, x86_64</MtouchArch> | |||
<MtouchLink>None</MtouchLink> | |||
<MtouchDebug>True</MtouchDebug> | |||
<MtouchProfiling>False</MtouchProfiling> | |||
<MtouchFastDev>False</MtouchFastDev> | |||
<MtouchUseLlvm>False</MtouchUseLlvm> | |||
<MtouchUseThumb>False</MtouchUseThumb> | |||
<MtouchEnableBitcode>False</MtouchEnableBitcode> | |||
<OptimizePNGs>True</OptimizePNGs> | |||
<MtouchTlsProvider>Default</MtouchTlsProvider> | |||
<MtouchHttpClientHandler>HttpClientHandler</MtouchHttpClientHandler> | |||
<MtouchFloat32>False</MtouchFloat32> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' "> | |||
<DebugType>none</DebugType> | |||
<Optimize>true</Optimize> | |||
<OutputPath>bin\iPhoneSimulator\Release</OutputPath> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<MtouchLink>None</MtouchLink> | |||
<MtouchArch>i386, x86_64</MtouchArch> | |||
<ConsolePause>false</ConsolePause> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' "> | |||
<DebugSymbols>true</DebugSymbols> | |||
<DebugType>full</DebugType> | |||
<Optimize>false</Optimize> | |||
<OutputPath>bin\iPhone\Debug</OutputPath> | |||
<DefineConstants>DEBUG</DefineConstants> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<ConsolePause>false</ConsolePause> | |||
<MtouchArch>ARMv7, ARM64</MtouchArch> | |||
<CodesignKey>iPhone Developer</CodesignKey> | |||
<MtouchDebug>true</MtouchDebug> | |||
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements> | |||
<MtouchLink>None</MtouchLink> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' "> | |||
<DebugType>none</DebugType> | |||
<Optimize>true</Optimize> | |||
<OutputPath>bin\iPhone\Release</OutputPath> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<MtouchArch>ARMv7, ARM64</MtouchArch> | |||
<ConsolePause>false</ConsolePause> | |||
<CodesignKey>iPhone Developer</CodesignKey> | |||
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Ad-Hoc|iPhone' "> | |||
<DebugType>none</DebugType> | |||
<Optimize>True</Optimize> | |||
<OutputPath>bin\iPhone\Ad-Hoc</OutputPath> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<ConsolePause>False</ConsolePause> | |||
<MtouchArch>ARMv7, ARM64</MtouchArch> | |||
<BuildIpa>True</BuildIpa> | |||
<CodesignProvision>Automatic:AdHoc</CodesignProvision> | |||
<CodesignKey>iPhone Distribution</CodesignKey> | |||
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'AppStore|iPhone' "> | |||
<DebugType>none</DebugType> | |||
<Optimize>True</Optimize> | |||
<OutputPath>bin\iPhone\AppStore</OutputPath> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
<ConsolePause>False</ConsolePause> | |||
<MtouchArch>ARMv7, ARM64</MtouchArch> | |||
<CodesignProvision>Automatic:AppStore</CodesignProvision> | |||
<CodesignKey>iPhone Distribution</CodesignKey> | |||
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements> | |||
</PropertyGroup> | |||
<ItemGroup> | |||
<Compile Include="Effects\EntryLineColorEffect.cs" /> | |||
<Compile Include="Main.cs" /> | |||
<Compile Include="AppDelegate.cs" /> | |||
<BundleResource Include="..\CommonResources\Fonts\Montserrat-Bold.ttf"> | |||
<Link>Resources\fonts\Montserrat-Bold.ttf</Link> | |||
</BundleResource> | |||
<BundleResource Include="..\CommonResources\Fonts\Montserrat-Regular.ttf"> | |||
<Link>Resources\fonts\Montserrat-Regular.ttf</Link> | |||
</BundleResource> | |||
<BundleResource Include="..\CommonResources\Fonts\SourceSansPro-Regular.ttf"> | |||
<Link>Resources\fonts\SourceSansPro-Regular.ttf</Link> | |||
</BundleResource> | |||
<Compile Include="Renderers\CustomTabbedPageRenderer.cs" /> | |||
<Compile Include="Renderers\SlideDownMenuPageRenderer.cs" /> | |||
<None Include="app.config" /> | |||
<None Include="Entitlements.plist" /> | |||
<None Include="Info.plist" /> | |||
<Compile Include="Properties\AssemblyInfo.cs" /> | |||
<ITunesArtwork Include="iTunesArtwork" /> | |||
<ITunesArtwork Include="iTunesArtwork@2x" /> | |||
<Compile Include="Effects\CircleEffect.cs" /> | |||
<BundleResource Include="Resources\menu_campaigns.png" /> | |||
<BundleResource Include="Resources\menu_campaigns%402x.png" /> | |||
<BundleResource Include="Resources\menu_campaigns%403x.png" /> | |||
<None Include="packages.config" /> | |||
<Compile Include="Services\LocationServiceImplementation.cs" /> | |||
<Compile Include="Services\PermissionsService.cs" /> | |||
<Compile Include="Services\GeolocationSingleUpdateDelegate.cs" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Icon-60%403x.png" /> | |||
<BundleResource Include="Resources\Icon-Small-40%403x.png" /> | |||
<BundleResource Include="Resources\Icon-Small%403x.png" /> | |||
<InterfaceDefinition Include="Resources\LaunchScreen.storyboard" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<Reference Include="System" /> | |||
<Reference Include="System.Xml" /> | |||
<Reference Include="System.Core" /> | |||
<Reference Include="Xamarin.iOS" /> | |||
<Reference Include="System.IO.Compression" /> | |||
<Reference Include="System.Net.Http" /> | |||
<Reference Include="Xamarin.Forms.Core"> | |||
<HintPath>..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Xamarin.Forms.Platform"> | |||
<HintPath>..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Xamarin.Forms.Platform.iOS"> | |||
<HintPath>..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Xamarin.Forms.Xaml"> | |||
<HintPath>..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll</HintPath> | |||
</Reference> | |||
<Reference Include="WebP.Touch"> | |||
<HintPath>..\..\..\..\packages\WebP.Touch.1.0.7\lib\Xamarin.iOS10\WebP.Touch.dll</HintPath> | |||
</Reference> | |||
<Reference Include="FFImageLoading"> | |||
<HintPath>..\..\..\..\packages\Xamarin.FFImageLoading.2.3.4\lib\Xamarin.iOS10\FFImageLoading.dll</HintPath> | |||
</Reference> | |||
<Reference Include="FFImageLoading.Platform"> | |||
<HintPath>..\..\..\..\packages\Xamarin.FFImageLoading.2.3.4\lib\Xamarin.iOS10\FFImageLoading.Platform.dll</HintPath> | |||
</Reference> | |||
<Reference Include="FFImageLoading.Forms"> | |||
<HintPath>..\..\..\..\packages\Xamarin.FFImageLoading.Forms.2.3.4\lib\Xamarin.iOS10\FFImageLoading.Forms.dll</HintPath> | |||
</Reference> | |||
<Reference Include="FFImageLoading.Forms.Touch"> | |||
<HintPath>..\..\..\..\packages\Xamarin.FFImageLoading.Forms.2.3.4\lib\Xamarin.iOS10\FFImageLoading.Forms.Touch.dll</HintPath> | |||
</Reference> | |||
<Reference Include="SlideOverKit"> | |||
<HintPath>..\..\..\..\packages\SlideOverKit.2.1.5\lib\Xamarin.iOS10\SlideOverKit.dll</HintPath> | |||
</Reference> | |||
<Reference Include="SlideOverKit.iOS"> | |||
<HintPath>..\..\..\..\packages\SlideOverKit.2.1.5\lib\Xamarin.iOS10\SlideOverKit.iOS.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Plugin.Settings.Abstractions"> | |||
<HintPath>..\..\..\..\packages\Xam.Plugins.Settings.3.1.1\lib\Xamarin.iOS10\Plugin.Settings.Abstractions.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Plugin.Settings"> | |||
<HintPath>..\..\..\..\packages\Xam.Plugins.Settings.3.1.1\lib\Xamarin.iOS10\Plugin.Settings.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Newtonsoft.Json"> | |||
<HintPath>..\..\..\..\packages\Newtonsoft.Json.10.0.3\lib\netstandard1.3\Newtonsoft.Json.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Acr.Support.iOS"> | |||
<HintPath>..\..\..\..\packages\Acr.Support.2.1.0\lib\Xamarin.iOS10\Acr.Support.iOS.dll</HintPath> | |||
</Reference> | |||
<Reference Include="BTProgressHUD"> | |||
<HintPath>..\..\..\..\packages\BTProgressHUD.1.2.0.5\lib\Xamarin.iOS10\BTProgressHUD.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Splat"> | |||
<HintPath>..\..\..\..\packages\Splat.2.0.0\lib\Xamarin.iOS10\Splat.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Acr.UserDialogs"> | |||
<HintPath>..\..\..\..\packages\Acr.UserDialogs.6.5.1\lib\Xamarin.iOS10\Acr.UserDialogs.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Acr.UserDialogs.Interface"> | |||
<HintPath>..\..\..\..\packages\Acr.UserDialogs.6.5.1\lib\Xamarin.iOS10\Acr.UserDialogs.Interface.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PInvoke.Windows.Core"> | |||
<HintPath>..\..\..\..\packages\PInvoke.Windows.Core.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.Windows.Core.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PInvoke.Kernel32"> | |||
<HintPath>..\..\..\..\packages\PInvoke.Kernel32.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.Kernel32.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PInvoke.BCrypt"> | |||
<HintPath>..\..\..\..\packages\PInvoke.BCrypt.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.BCrypt.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PInvoke.NCrypt"> | |||
<HintPath>..\..\..\..\packages\PInvoke.NCrypt.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.NCrypt.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Validation"> | |||
<HintPath>..\..\..\..\packages\Validation.2.2.8\lib\dotnet\Validation.dll</HintPath> | |||
</Reference> | |||
<Reference Include="PCLCrypto"> | |||
<HintPath>..\..\..\..\packages\PCLCrypto.2.0.147\lib\xamarinios10\PCLCrypto.dll</HintPath> | |||
</Reference> | |||
<Reference Include="IdentityModel"> | |||
<HintPath>..\..\..\..\packages\IdentityModel.3.0.0\lib\netstandard2.0\IdentityModel.dll</HintPath> | |||
</Reference> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\fake_product_01.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\fake_product_03.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\fake_product_02.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\fake_product_04.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\fake_product_05.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\menu_cart.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\menu_cart%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\menu_cart%403x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\menu_filter.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\menu_filter%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\menu_filter%403x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\menu_profile.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\menu_profile%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\menu_profile%403x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\product_add.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\product_add%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\product_add%403x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\app_settings%403x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\app_settings.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\app_settings%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\switchOff.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\switchOff%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\switchOff%403x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\switchOn.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\switchOn%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\switchOn%403x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Contents.json"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-60%402x.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-76.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-76%402x.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-Small.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-Small%402x.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-Small-40.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\AppIcon.appiconset\Icon-Small-40%402x.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\Contents.json"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\Default.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\Default%402x.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\Default-568h%402x.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\Default-Portrait.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\Default-Portrait%402x.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\Default-750%402x.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
<ImageAsset Include="Assets.xcassets\LaunchImage.launchimage\Default-1242%403x.png"> | |||
<Visible>false</Visible> | |||
</ImageAsset> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Default.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Logo.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\noimage.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\default_product.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\banner.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Default%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Default-568h%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Default-Portrait.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Default-Portrait%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Icon-60%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Icon-76.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Icon-76%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Icon-Small.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Icon-Small%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Icon-Small-40.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\Icon-Small-40%402x.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\fake_campaign_01.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BundleResource Include="Resources\fake_campaign_02.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<AndroidResource Include="Resources\default_campaign.png" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="..\eShopOnContainers.Core\eShopOnContainers.Core.csproj"> | |||
<Project>{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}</Project> | |||
<Name>eShopOnContainers.Core</Name> | |||
</ProjectReference> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<Folder Include="Services\" /> | |||
</ItemGroup> | |||
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" /> | |||
<Import Project="..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\build\netstandard1.0\Xamarin.Forms.targets" Condition="Exists('..\..\..\..\packages\Xamarin.Forms.2.5.0.122203\build\netstandard1.0\Xamarin.Forms.targets')" /> | |||
<Import Project="..\..\..\..\packages\NETStandard.Library.2.0.0\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\..\..\..\packages\NETStandard.Library.2.0.0\build\netstandard2.0\NETStandard.Library.targets')" /> | |||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> | |||
<PropertyGroup> | |||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> | |||
</PropertyGroup> | |||
<Error Condition="!Exists('..\..\..\..\packages\NETStandard.Library.2.0.0\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\NETStandard.Library.2.0.0\build\netstandard2.0\NETStandard.Library.targets'))" /> | |||
</Target> | |||
<Error Condition="!Exists('..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\build\netstandard2.0\Xamarin.Forms.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\build\netstandard2.0\Xamarin.Forms.props'))" /> | |||
<Error Condition="!Exists('..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\build\netstandard2.0\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\build\netstandard2.0\Xamarin.Forms.targets'))" /> | |||
<Error Condition="!Exists('..\..\..\..\packages\NETStandard.Library.2.0.1\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\NETStandard.Library.2.0.1\build\netstandard2.0\NETStandard.Library.targets'))" /> | |||
</Target> | |||
<Import Project="..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\build\netstandard2.0\Xamarin.Forms.targets" Condition="Exists('..\..\..\..\packages\Xamarin.Forms.3.0.0.482510\build\netstandard2.0\Xamarin.Forms.targets')" /> | |||
<Import Project="..\..\..\..\packages\NETStandard.Library.2.0.1\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\..\..\..\packages\NETStandard.Library.2.0.1\build\netstandard2.0\NETStandard.Library.targets')" /> | |||
</Project> |