From 37dd5f1b5d9ea14fad4fe600d2fad4e42ad3b3f6 Mon Sep 17 00:00:00 2001 From: lxw Date: Fri, 17 May 2024 11:49:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A1=86=E6=9E=B6=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ConsoleStarter/ConsoleStarter.csproj | 2 +- Entity/Common/IPageList.cs | 11 - Entity/Common/PageList.cs | 99 --------- Entity/Entity.csproj | 2 +- .../Entity/DatetimeJsonConverter.cs | 27 +++ HybirdFrameworkCore/Entity/IPage.cs | 20 ++ HybirdFrameworkCore/Entity/PageResult.cs | 58 ++++++ HybirdFrameworkCore/Entity/QueryPageModel.cs | 13 ++ HybirdFrameworkCore/Entity/Result.cs | 104 ++++++++++ .../HybirdFrameworkCore.csproj | 1 + Repository/BaseRepository.cs | 192 +++++++++--------- Repository/Repository.csproj | 2 +- Service/BaseServices.cs | 67 +----- Service/Service.csproj | 2 +- WebStarter/Controllers/Test/GenController.cs | 57 ++++++ .../{ => Test}/WeatherForecastController.cs | 2 +- WebStarter/Program.cs | 35 +++- WpfStarter/WpfStarter.csproj | 2 +- 18 files changed, 411 insertions(+), 285 deletions(-) delete mode 100644 Entity/Common/IPageList.cs delete mode 100644 Entity/Common/PageList.cs create mode 100644 HybirdFrameworkCore/Entity/DatetimeJsonConverter.cs create mode 100644 HybirdFrameworkCore/Entity/IPage.cs create mode 100644 HybirdFrameworkCore/Entity/PageResult.cs create mode 100644 HybirdFrameworkCore/Entity/QueryPageModel.cs create mode 100644 HybirdFrameworkCore/Entity/Result.cs create mode 100644 WebStarter/Controllers/Test/GenController.cs rename WebStarter/Controllers/{ => Test}/WeatherForecastController.cs (96%) diff --git a/ConsoleStarter/ConsoleStarter.csproj b/ConsoleStarter/ConsoleStarter.csproj index 57b5dae..5849726 100644 --- a/ConsoleStarter/ConsoleStarter.csproj +++ b/ConsoleStarter/ConsoleStarter.csproj @@ -16,7 +16,7 @@ - + diff --git a/Entity/Common/IPageList.cs b/Entity/Common/IPageList.cs deleted file mode 100644 index 438c220..0000000 --- a/Entity/Common/IPageList.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Entity.Common; - -public interface IPageList : IList -{ - int PageIndex { get; } - int PageSize { get; } - int TotalCount { get; } - int TotalPages { get; } - bool HasPreviousPage { get; } - bool HasNextPage { get; } -} \ No newline at end of file diff --git a/Entity/Common/PageList.cs b/Entity/Common/PageList.cs deleted file mode 100644 index 89eb1ba..0000000 --- a/Entity/Common/PageList.cs +++ /dev/null @@ -1,99 +0,0 @@ -namespace Entity.Common; - -/// -/// 分页组件实体类 -/// -/// 泛型实体 -[Serializable] -public class PageList : List, IPageList -{ - /// - /// 构造函数 - /// - /// 数据源 - /// 分页索引 - /// 分页大小 - public PageList(IQueryable source, int pageIndex, int pageSize) - { - var total = source.Count(); - TotalCount = total; - TotalPages = total / pageSize; - - if (total % pageSize > 0) - TotalPages++; - - PageSize = pageSize; - PageIndex = pageIndex; - - AddRange(source.Skip(pageIndex * pageSize).Take(pageSize).ToList()); - } - - /// - /// 构造函数 - /// - /// 数据源 - /// 分页索引 - /// 分页大小 - public PageList(IList source, int pageIndex, int pageSize) - { - TotalCount = source.Count(); - TotalPages = TotalCount / pageSize; - - if (TotalCount % pageSize > 0) - TotalPages++; - - PageSize = pageSize; - PageIndex = pageIndex; - AddRange(source.Skip(pageIndex * pageSize).Take(pageSize).ToList()); - } - - /// - /// 构造函数 - /// - /// 数据源 - /// 分页索引 - /// 分页大小 - /// 总记录数 - public PageList(IEnumerable source, int pageIndex, int pageSize, int totalCount) - { - TotalCount = totalCount; - TotalPages = TotalCount / pageSize; - - if (TotalCount % pageSize > 0) - TotalPages++; - - PageSize = pageSize; - PageIndex = pageIndex; - AddRange(source); - } - - /// - /// 分页索引 - /// - public int PageIndex { get; } - - /// - /// 分页大小 - /// - public int PageSize { get; private set; } - - /// - /// 总记录数 - /// - public int TotalCount { get; } - - /// - /// 总页数 - /// - public int TotalPages { get; } - - /// - /// 是否有上一页 - /// - public bool HasPreviousPage => PageIndex > 0; - - /// - /// 是否有下一页 - /// - public bool HasNextPage => PageIndex + 1 < TotalPages; -} \ No newline at end of file diff --git a/Entity/Entity.csproj b/Entity/Entity.csproj index 9352d52..2a3a2c0 100644 --- a/Entity/Entity.csproj +++ b/Entity/Entity.csproj @@ -7,7 +7,7 @@ - + diff --git a/HybirdFrameworkCore/Entity/DatetimeJsonConverter.cs b/HybirdFrameworkCore/Entity/DatetimeJsonConverter.cs new file mode 100644 index 0000000..4e0facd --- /dev/null +++ b/HybirdFrameworkCore/Entity/DatetimeJsonConverter.cs @@ -0,0 +1,27 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace HybirdFrameworkCore.Entity; + + +/// +/// 序列化 +/// +public class DatetimeJsonConverter : JsonConverter +{ + public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType == JsonTokenType.String) + { + if (DateTime.TryParse(reader.GetString(), out DateTime date)) + return date; + } + + return reader.GetDateTime(); + } + + public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) + { + writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss")); + } +} \ No newline at end of file diff --git a/HybirdFrameworkCore/Entity/IPage.cs b/HybirdFrameworkCore/Entity/IPage.cs new file mode 100644 index 0000000..b9a8d4a --- /dev/null +++ b/HybirdFrameworkCore/Entity/IPage.cs @@ -0,0 +1,20 @@ +namespace HybirdFrameworkCore.Entity; + +public class IPage +{ + public int Total; + + public int PageNum; + + public int PageSize; + + public List? Rows; + + public IPage(int total, QueryPageModel page, List? rows) + { + Total = total; + PageNum = page.Page; + PageSize = page.PageSize; + Rows = rows; + } +} \ No newline at end of file diff --git a/HybirdFrameworkCore/Entity/PageResult.cs b/HybirdFrameworkCore/Entity/PageResult.cs new file mode 100644 index 0000000..80d49fc --- /dev/null +++ b/HybirdFrameworkCore/Entity/PageResult.cs @@ -0,0 +1,58 @@ +using System.Diagnostics; +using AutoMapper; + +namespace HybirdFrameworkCore.Entity +{ + public class PageResult + { + /// + /// 当前页标 + /// + public int PageNum { get; set; } + + /// + /// 每页大小 + /// + public int PageSize { set; get; } + + /// + /// 返回数据 + /// + public List? Rows { get; set; } + + /// + /// 当前页标 + /// + public long ToTal { get; set; } + + public PageResult() + { + PageSize = 0; + PageNum = 0; + ToTal = 0; + Rows = new List(); + } + + + public static PageResult ConvertPage(IPage page) where TS : class, new() + { + if (page.Total <= 0 || page.Rows == null) + { + return new PageResult(); + } + + MapperConfiguration configuration = new MapperConfiguration(cfg => cfg.CreateMap()); + + Debug.Assert(page.Rows != null, "iPage.Rows != null"); + List listDest = configuration.CreateMapper().Map, List>(page.Rows); + + return new PageResult() + { + PageSize = page.PageSize, + PageNum = page.PageNum, + ToTal = page.Total, + Rows = listDest, + }; + } + } +} \ No newline at end of file diff --git a/HybirdFrameworkCore/Entity/QueryPageModel.cs b/HybirdFrameworkCore/Entity/QueryPageModel.cs new file mode 100644 index 0000000..b8bfd4a --- /dev/null +++ b/HybirdFrameworkCore/Entity/QueryPageModel.cs @@ -0,0 +1,13 @@ +namespace HybirdFrameworkCore.Entity; + +public class QueryPageModel +{ + /// + ///页码 + /// + public int Page { get; set; } = 1; + /// + /// 页数 + /// + public int PageSize { get; set; } = 10; +} \ No newline at end of file diff --git a/HybirdFrameworkCore/Entity/Result.cs b/HybirdFrameworkCore/Entity/Result.cs new file mode 100644 index 0000000..3bc3134 --- /dev/null +++ b/HybirdFrameworkCore/Entity/Result.cs @@ -0,0 +1,104 @@ +namespace HybirdFrameworkCore.Entity +{ + /// + /// 通用返回信息类 + /// + public class Result + { + /// + /// 状态码 + /// + + public int Status { get; set; } = 200; + /// + /// 操作是否成功 + /// + public bool IsSuccess { get; set; } = false; + /// + /// 返回信息 + /// + public string? Msg { get; set; } + + /// + /// 返回数据集合 + /// + public T? Data { get; set; } + + /// + /// 返回成功 + /// + /// 消息 + /// + public static Result Success(string msg = "成功") + { + return Message(true, msg, default); + } + + + + /// + /// 返回成功 + /// + /// 数据 + /// 消息 + /// + public static Result Success(T data, string msg = "成功") + { + return Message(true, msg, data); + } + + + + /// + /// 返回失败 + /// + /// 消息 + /// + public static Result Fail(string msg = "失败") + { + return Message(false, msg, default); + } + + + /// + /// 返回失败 + /// + /// 消息 + /// 数据 + /// + public static Result Fail(T data, string msg = "失败") + { + return Message(false, msg, data); + } + + /// + /// 返回消息 + /// + /// 失败/成功 + /// 消息 + /// 数据 + /// + public static Result Message(bool success, string msg, T data) + { + return new Result() { Msg = msg, Data = data, IsSuccess = success }; + } + + /// + /// 返回消息 + /// + /// 失败/成功 + /// 消息 + /// 数据 + /// + public static Result Message(bool success, T data) + { + return new Result() { Msg="查询成功", Data = data, IsSuccess = success }; + } + + + + } + + + +} diff --git a/HybirdFrameworkCore/HybirdFrameworkCore.csproj b/HybirdFrameworkCore/HybirdFrameworkCore.csproj index ae3db33..ae5b4e4 100644 --- a/HybirdFrameworkCore/HybirdFrameworkCore.csproj +++ b/HybirdFrameworkCore/HybirdFrameworkCore.csproj @@ -8,6 +8,7 @@ + diff --git a/Repository/BaseRepository.cs b/Repository/BaseRepository.cs index c1e94fc..2cf9e53 100644 --- a/Repository/BaseRepository.cs +++ b/Repository/BaseRepository.cs @@ -1,5 +1,5 @@ using System.Linq.Expressions; -using Entity.Common; +using HybirdFrameworkCore.Entity; using SqlSugar; namespace Repository; @@ -1004,105 +1004,97 @@ public abstract class BaseRepository where T : class, new() { return await DbBaseClient.Queryable().Where(predicate).WithNoLockOrNot(blUseNoLock).SumAsync(field); } - - /// - /// 根据条件查询分页数据 - /// - /// - /// - /// 当前页面索引 - /// 分布大小 - /// 是否使用WITH(NOLOCK) - /// - public IPageList QueryPage(Expression> predicate, string orderBy = "", int pageIndex = 1, - int pageSize = 20, bool blUseNoLock = false) - { - var totalCount = 0; - var page = DbBaseClient - .Queryable() - .OrderByIF(!string.IsNullOrEmpty(orderBy), orderBy) - .WhereIF(predicate != null, predicate) - .WithNoLockOrNot(blUseNoLock) - .ToPageList(pageIndex, pageSize, ref totalCount); - - var list = new PageList(page, pageIndex, pageSize, totalCount); - return list; - } - - /// - /// 根据条件查询分页数据 - /// - /// - /// - /// 当前页面索引 - /// 分布大小 - /// 是否使用WITH(NOLOCK) - /// - public async Task> QueryPageAsync(Expression> predicate, string orderBy = "", - int pageIndex = 1, int pageSize = 20, bool blUseNoLock = false) - { - RefAsync totalCount = 0; - var page = await DbBaseClient - .Queryable() - .OrderByIF(!string.IsNullOrEmpty(orderBy), orderBy) - .WhereIF(predicate != null, predicate) - .WithNoLockOrNot(blUseNoLock) - .ToPageListAsync(pageIndex, pageSize, totalCount); - var list = new PageList(page, pageIndex, pageSize, totalCount); - return list; - } - - /// - /// 根据条件查询分页数据 - /// - /// 判断集合 - /// 排序方式 - /// 当前页面索引 - /// 分布大小 - /// - /// 是否使用WITH(NOLOCK) - /// - public IPageList QueryPage(Expression> predicate, - Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1, - int pageSize = 20, bool blUseNoLock = false) - { - var totalCount = 0; - var page = DbBaseClient - .Queryable() - .OrderByIF(orderByExpression != null, orderByExpression, orderByType) - .WhereIF(predicate != null, predicate) - .WithNoLockOrNot(blUseNoLock) - .ToPageList(pageIndex, pageSize, ref totalCount); - - var list = new PageList(page, pageIndex, pageSize, totalCount); - return list; - } - - /// - /// 根据条件查询分页数据 - /// - /// 判断集合 - /// 排序方式 - /// 当前页面索引 - /// 分布大小 - /// - /// 是否使用WITH(NOLOCK) - /// - public async Task> QueryPageAsync(Expression> predicate, - Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1, - int pageSize = 20, bool blUseNoLock = false) - { - RefAsync totalCount = 0; - var page = await DbBaseClient - .Queryable() - .WhereIF(predicate != null, predicate) - .OrderByIF(orderByExpression != null, orderByExpression, orderByType) - .WithNoLockOrNot(blUseNoLock) - .ToPageListAsync(pageIndex, pageSize, totalCount); - - var list = new PageList(page, pageIndex, pageSize, totalCount); - return list; - } + /// + /// 根据条件查询表单数据(分页) + /// + /// 页数 + /// 每页几条数据 + /// 是否使用WITH(NOLOCK) + /// + public IPage QueryIPageByCause(QueryPageModel page, Expression> predicate) + { + if (null == predicate) { + return this.QueryIPage(page); + } + int totalCount = 0; + + + List pageList = DbBaseClient + .Queryable() + .Where(predicate) + .WithNoLockOrNot(false) + .ToPageList(page.Page, page.PageSize, ref totalCount); + + + + return new IPage(totalCount, page, pageList); + } + + /// + /// 根据条件查询表单数据(分页) 异步 + /// + /// + /// + /// + public async Task> QueryIPageByCauseAsync(QueryPageModel page, Expression> predicate) + { + if (null == predicate) + { + return await this.QueryIPageAsync(page); + } + RefAsync totalCount = 0; + + + List pageList = await DbBaseClient + .Queryable() + .Where(predicate) + .WithNoLockOrNot(false) + .ToPageListAsync(page.Page, page.PageSize, totalCount); + + + + return new IPage(totalCount, page, pageList); + } + + + /// + /// 查询表单所有数据(分页) + /// + /// 页数 + /// 每页几条数据 + /// 是否使用WITH(NOLOCK) + /// + public IPage QueryIPage(QueryPageModel page) + { + int totalCount = 0; + //page.Page = page.Page == 0 ? 1 : page.Page;//默认第一页 10条数据 + //page.PageSize = page.PageSize == 0 ? 10 : page.PageSize; + + List pageList = DbBaseClient + .Queryable() + .WithNoLockOrNot(false) + .ToPageList(page.Page, page.PageSize, ref totalCount); + + return new IPage(totalCount, page, pageList); + } + + /// + /// 查询表单所有数据(分页) 异步 + /// + /// + /// + public async Task> QueryIPageAsync(QueryPageModel page) + { + RefAsync totalCount = 0; + + List pageList = await DbBaseClient + .Queryable() + .WithNoLockOrNot(false) + .ToPageListAsync(page.Page, page.PageSize, totalCount); + + return new IPage(totalCount, page, pageList); + } + /// /// 查询-2表查询 diff --git a/Repository/Repository.csproj b/Repository/Repository.csproj index 9c691e6..7e55f6e 100644 --- a/Repository/Repository.csproj +++ b/Repository/Repository.csproj @@ -8,7 +8,7 @@ - + diff --git a/Service/BaseServices.cs b/Service/BaseServices.cs index afaaeb7..3fdd212 100644 --- a/Service/BaseServices.cs +++ b/Service/BaseServices.cs @@ -1,5 +1,4 @@ using System.Linq.Expressions; -using Entity.Common; using Repository; using SqlSugar; @@ -875,71 +874,7 @@ public class BaseServices where T : class, new() { return await BaseDal.GetSumAsync(predicate, field, blUseNoLock); } - - /// - /// 根据条件查询分页数据 - /// - /// - /// - /// 当前页面索引 - /// 分布大小 - /// 是否使用WITH(NOLOCK) - /// - public IPageList QueryPage(Expression> predicate, string orderBy = "", int pageIndex = 1, - int pageSize = 20, bool blUseNoLock = false) - { - return BaseDal.QueryPage(predicate, orderBy, pageIndex, pageSize, blUseNoLock); - } - - /// - /// 根据条件查询分页数据 - /// - /// - /// - /// 当前页面索引 - /// 分布大小 - /// 是否使用WITH(NOLOCK) - /// - public async Task> QueryPageAsync(Expression> predicate, string orderBy = "", - int pageIndex = 1, int pageSize = 20, bool blUseNoLock = false) - { - return await BaseDal.QueryPageAsync(predicate, orderBy, pageIndex, pageSize, blUseNoLock); - } - - /// - /// 根据条件查询分页数据 - /// - /// 判断集合 - /// 排序方式 - /// 当前页面索引 - /// 分布大小 - /// - /// 是否使用WITH(NOLOCK) - /// - public IPageList QueryPage(Expression> predicate, - Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1, - int pageSize = 20, bool blUseNoLock = false) - { - return BaseDal.QueryPage(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock); - } - - /// - /// 根据条件查询分页数据 - /// - /// 判断集合 - /// 排序方式 - /// 当前页面索引 - /// 分布大小 - /// - /// 是否使用WITH(NOLOCK) - /// - public async Task> QueryPageAsync(Expression> predicate, - Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1, - int pageSize = 20, bool blUseNoLock = false) - { - return await BaseDal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, - blUseNoLock); - } + /// /// 查询-多表查询 diff --git a/Service/Service.csproj b/Service/Service.csproj index 1ee60b6..433e1ae 100644 --- a/Service/Service.csproj +++ b/Service/Service.csproj @@ -14,7 +14,7 @@ - + diff --git a/WebStarter/Controllers/Test/GenController.cs b/WebStarter/Controllers/Test/GenController.cs new file mode 100644 index 0000000..843ff1b --- /dev/null +++ b/WebStarter/Controllers/Test/GenController.cs @@ -0,0 +1,57 @@ +using Microsoft.AspNetCore.Mvc; +using Repository.Station; +using SqlSugar; + +namespace WebStarter.Controllers.Test; + +[ApiController] +[Route("[controller]")] +public class GenController : ControllerBase +{ + private readonly ISqlSugarClient _sqlSugarClient; + + public GenController(ISqlSugarClient sqlSugarClient) + { + _sqlSugarClient = sqlSugarClient; + + } + + /// + /// 生成文件 + /// + /// + [HttpGet("gen/t/{id}")] + public void Get(int id) + { + Console.WriteLine(); + _sqlSugarClient.DbFirst + .IsCreateAttribute() //创建sqlsugar自带特性 + .FormatFileName(it => ToPascalCase(it)) //格式化文件名(文件名和表名不一样情况) + .FormatClassName(it => ToPascalCase(it)) //格式化类名 (类名和表名不一样的情况) + .FormatPropertyName(it => ToPascalCase(it)) //格式化属性名 (属性名和字段名不一样情况) + .CreateClassFile("D:\\lxw\\work\\pro\\c#\\hn_back_main\\Entity\\DbModel\\Station", + "Entity.DbModel.Station"); + + + Console.WriteLine("生成完毕"); + } + + + + + static string ToPascalCase(string input) + { + if (string.IsNullOrEmpty(input)) + return input; + string[] strings = input.Split("_"); + string res = ""; + foreach (var s in strings) + { + string first = s.First().ToString().ToUpper(); + string te = first + s.Substring(1); + res += te; + } + + return res; + } +} \ No newline at end of file diff --git a/WebStarter/Controllers/WeatherForecastController.cs b/WebStarter/Controllers/Test/WeatherForecastController.cs similarity index 96% rename from WebStarter/Controllers/WeatherForecastController.cs rename to WebStarter/Controllers/Test/WeatherForecastController.cs index f3f784d..bd80138 100644 --- a/WebStarter/Controllers/WeatherForecastController.cs +++ b/WebStarter/Controllers/Test/WeatherForecastController.cs @@ -1,7 +1,7 @@ using Microsoft.AspNetCore.Mvc; using Service.System; -namespace WebStarter.Controllers; +namespace WebStarter.Controllers.Test; [ApiController] [Route("[controller]")] diff --git a/WebStarter/Program.cs b/WebStarter/Program.cs index 5cfa57f..08010f6 100644 --- a/WebStarter/Program.cs +++ b/WebStarter/Program.cs @@ -2,6 +2,7 @@ using Autofac; using Autofac.Extensions.DependencyInjection; using HybirdFrameworkCore.Autofac; using HybirdFrameworkCore.Configuration; +using HybirdFrameworkCore.Entity; using HybirdFrameworkCore.Redis; using SqlSugar; using SqlSugar.IOC; @@ -43,9 +44,36 @@ if (redisConnectionString != null && instanceName != null) builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); -builder.Services.AddSwaggerGen(); -builder.Logging.AddLog4Net("log4net.config"); +builder.Logging.AddLog4Net("log4net.config"); +builder.Services.AddSwaggerGen(c => +{ + var basePath = Path.GetDirectoryName(AppContext.BaseDirectory); + //c.IncludeXmlComments(Path.Combine(basePath, Assembly.GetExecutingAssembly().GetName().Name+".xml"), true); + c.IncludeXmlComments(Path.Combine(basePath, "WebStarter.xml"), true); + c.IncludeXmlComments(Path.Combine(basePath, "Entity.xml"), true); + c.IncludeXmlComments(Path.Combine(basePath, "HybirdFrameworkCore.xml"), true); + + +}); +//跨域 +builder.Services.AddCors(options => +{ + options.AddPolicy + (name: "myCors", + builde => + { + builde.WithOrigins("*", "*", "*") + .AllowAnyOrigin() + .AllowAnyHeader() + .AllowAnyMethod(); + } + ); +}); +builder.Services.AddControllers().AddJsonOptions(configure => +{ + configure.JsonSerializerOptions.Converters.Add(new DatetimeJsonConverter()); +}); var app = builder.Build(); @@ -54,10 +82,11 @@ if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); + app.UseStaticFiles(); } app.UseAuthorization(); - +app.UseCors("myCors"); app.MapControllers(); AppInfo.Container = app.Services.GetAutofacRoot(); diff --git a/WpfStarter/WpfStarter.csproj b/WpfStarter/WpfStarter.csproj index bb66c09..acf2725 100644 --- a/WpfStarter/WpfStarter.csproj +++ b/WpfStarter/WpfStarter.csproj @@ -12,7 +12,7 @@ - +