本章将要与我们享用的凡Asp.NetCore1.1本子去丢了project.json后如何打包生成跨平台包, 为了更好与进AspNetCore的进化,把后边用来做netcore开发之vs2015推载后连安装了vs2017,那吃自身带来的第一手利益是拿自报红的C盘腾出10GB左右的半空中,从这边一贯会感受及vs2017体积如此的微;在此之前有描绘了千篇一律篇开源netcore服务之稿子开源一个跨平台运行的劳动插件 –
TaskCore.MainForm
,里面有叙netcore项目变更和配置于win7和ubuntu16.04网及之例证,感兴趣之意中人可以去探望;下面开首本文的情节,希望大家能好,也欲各位多多”扫码协助“和”推荐“谢谢!

**AspNetCore中使用Session(基于MemoryCache组件)**

这节内容看起有些不合乎小说标题,紧假如单纯写死成跨平台包的始末最少,有些朋友认为工作太少不满足,因而便用就假若拔取Session来填充吧哈哈(我的见地是:一上同向上,哪怕一丁点);对于一个web程序来说session存储通常暴发老多种术,例如我前面作品有利用Redis来囤积session的相关著作,这对一个netcore项目以来默认session存储的措施是memorycache的措施,可以这样在列蒙之 Startup.cs 文件被 Configure瑟维斯s 方法扩展如下代码有:

1 services.AddDistributedMemoryCache();
2 services.AddSession(b =>
3 {
4     b.IdleTimeout = TimeSpan.FromMinutes(1);5     b.CookieName = "MySid";
6 });

并于 Configure 方法中补充加 app.UseSession(); session的用;当把点的代码有复制到公程序中时时,会唤醒一个多少灯泡,需要你点击选拔引用下相应的管教,对于vs2017自行装了netcore的开发条件,所以只需要点击灯泡引用就推行了,若是您未曾装出sdk,那么用下载nuget包: Microsoft.AspNetCore.Session ;第一段子 services.AddDistributedMemoryCache() 重要意图是添加memorycache存储引用,第二截AddSession方法才是真添加session相关的事物,这里自己使用的少个个属性:

  1. Idle提姆(Tim)eout:设置session过期时;

  2. CookieName:设置sessionId存储于客户端浏览器被的key名称;

当好点步骤的操作后,可以以任意Controller(这里是HomeController)的Action中使 HttpContext.Session.Set 方法上加session:

1 public IActionResult About()
2         {
3             _logger.LogInformation("这里是About");
4 
5             var userInfo = "我的NetCore之Session";
6             HttpContext.Session.Set(SessionKey, System.Text.Encoding.UTF8.GetBytes(userInfo));
7             ViewData["Message"] = $"读取配置文件Option1节点值:{this._options.Option1},添加session";
8             return View();
9         }

再次经过此外Contact的Action中利用 HttpContext.Session.TryGetValue(SessionKey, out var
bt) 来赢得咱们刚装的session:

 1   public IActionResult Contact()
 2         {
 3             var userInfo = string.Empty;
 4             if (HttpContext.Session.TryGetValue(SessionKey, out var bt))
 5             {
 6                 userInfo = System.Text.Encoding.UTF8.GetString(bt);
 7             }
 8 
 9             ViewData["Message"] = string.IsNullOrWhiteSpace(userInfo) ? "Session获取为空" : userInfo;
10             return View();
11         }

哼了尽管这样简单,咋们运行看下效果:dontnet run
命令来运作测试站点,不出意外会当界面得到如下截图:

json 1

经过浏览器控制台能够见到咋们的sessionId的称是MySid,这几个相比较我们以 Startup.cs 设置的库克ieName一样吧;

 

ISession扩充方法

方用到的Set方法来保存sesseion,咋们来看望她底参数 void Set(string key, byte[]
value); 键值对的方,可是价值是一个byte[]种的参数,大家每回用的时还要好改变一下数据类型感觉不是挺便宜,那么我们透过扩大方法的形式来增添下 ISession ,如下扩充代码:

 1 public static class PublicExtensions
 2     {
 3         #region ISession扩展
 4 
 5         /// <summary>
 6         /// 设置session
 7         /// </summary>
 8         /// <typeparam name="T"></typeparam>
 9         /// <param name="session"></param>
10         /// <param name="key"></param>
11         /// <param name="val"></param>
12         /// <returns></returns>
13         public static bool Set<T>(this ISession session, string key, T val)
14         {
15             if (string.IsNullOrWhiteSpace(key) || val == null) { return false; }
16 
17             var strVal = JsonConvert.SerializeObject(val);
18             var bb = Encoding.UTF8.GetBytes(strVal);
19             session.Set(key, bb);
20             return true;
21         }
22 
23         /// <summary>
24         /// 获取session
25         /// </summary>
26         /// <typeparam name="T"></typeparam>
27         /// <param name="session"></param>
28         /// <param name="key"></param>
29         /// <returns></returns>
30         public static T Get<T>(this ISession session, string key)
31         {
32             var t = default(T);
33             if (string.IsNullOrWhiteSpace(key)) { return t; }
34 
35             if (session.TryGetValue(key, out byte[] val))
36             {
37                 var strVal = Encoding.UTF8.GetString(val);
38                 t = JsonConvert.DeserializeObject<T>(strVal);
39             }
40             return t;
41         }
42 
43         #endregion
44     }

直传送一个对象T到扩大方法吃,转类型后又囤积的session中失去,为了重新好之测试我们一贯以点测试用例上改代码如:

 1  public IActionResult About()
 2         {
 3             _logger.LogInformation("这里是About");
 4 
 5             //var userInfo = "我的NetCore之Session";
 6             //HttpContext.Session.Set(SessionKey, System.Text.Encoding.UTF8.GetBytes(userInfo));
 7 
 8             MoUser user = new MoUser();
 9             HttpContext.Session.Set<MoUser>(SessionKey, user);
10             ViewData["Message"] = $"读取配置文件Option1节点值:{this._options.Option1},添加session";
11             return View();
12         }
13 
14         public IActionResult Contact()
15         {
16             //var userInfo = string.Empty;
17             //if (HttpContext.Session.TryGetValue(SessionKey, out var bt))
18             //{
19             //    userInfo = System.Text.Encoding.UTF8.GetString(bt);
20             //}
21 
22             //ViewData["Message"] = string.IsNullOrWhiteSpace(userInfo) ? "Session获取为空" : userInfo;
23 
24             var user = HttpContext.Session.Get<MoUser>(SessionKey);
25             ViewData["Message"] = user == null ? "Session获取为空" : $"昵称:{user.UserName}";
26             return View();
27         }

圈起set或get的session操作都止需要一词代码就完了了是未是造福了多啊,最有令:dotnet
run 测试下效果,和点的一致自己虽无截图了;

json, 

**1.1本子去丢了project.json后,如何转移跨平台包**

顶此处虽入前几日底主题了,对于新型版本netcore去丢project.json网上研讨的尚算相比较激烈,可是网搜了产还尚未一样篇正式的粤语著作来讲述假诺转夸平台包,这里有幸或许吧成为第一首吧呵呵;首先,要明了netcore小组去丢project.json重要文件后,其任务还居了项目之.csproj文件中,没错就是咋们vs生成的型工程文件,那一点测试用例为例我们看下.csproj文件的内容:

 1 <Project Sdk="Microsoft.NET.Sdk.Web">
 2 
 3   <PropertyGroup>
 4     <TargetFramework>netcoreapp1.1</TargetFramework>
 5   </PropertyGroup>
 6   <PropertyGroup>
 7     <PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>
 8   </PropertyGroup>
 9   <ItemGroup>
10     <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.0" />
11     <PackageReference Include="Microsoft.AspNetCore" Version="1.1.1" />
12     <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.2" />
13     <PackageReference Include="Microsoft.AspNetCore.Session" Version="1.1.1" />
14     <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.1" />
15     <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.1" />
16     <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="1.1.0" />
17   </ItemGroup>
18   <ItemGroup>
19     <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.0" />
20   </ItemGroup>
21 </Project>

此地会直观的当ItemGroup节点看到我们抬高进去的Session的援和项目模板自带的Logging等的援,已经父节点 Project Sdk=”Microsoft.NET.Sdk.Web” ,我们设十分成跨平台运行包,就需操作是路文件之配备信息,这里只有需要充分如下代码:

1 <PropertyGroup>
2     <RuntimeIdentifiers>win7-x64;ubuntu.16.04-x64</RuntimeIdentifiers>
3   </PropertyGroup>

下一场再度经过发表命令就可以转移夸平台包了,是未是深简单的,所以位置将了一个Session小节做干货呢呵呵;咋们来测试下吧,首先在品种根本目录这样是执行命令:dontnet
restore

json 2

再也实践你简短的发布命令(这里自己直接运用默认参数的法子履行,宣布包会生成再bin上边):dotnet
publish

json 3

其一时大家能当目录:bin\Debug\netcoreapp1.1脚看看publish文本夹,里面就咋们程序执行文件了,为了测试下效果,这里我通过命令:dontnet WebApp01.dll (由于自身这里安装了sdk所以能够从来这样令运行)来运行我的测试用例项目:

json 4

到此处一个windows上运行的担保就做到了,有情侣便起始疑惑这超常平台吗,还有你在此以前安排的 <RuntimeIdentifiers>win7-x64;ubuntu.16.04-x64</RuntimeIdentifiers> 有啊效益也,这这里就是从头演示怎么生成ubunt.16.04-x64之运行包了(win7-x64之呢一样措施);咱们一样要通过:dontnet
restore
之后发布指令的时段这样描写:

dotnet publish -f netcoreapp1.1 –runtime ubuntu.16.04-x64

指令表达:

-f:framework的缩写;

netcoreapp1.1:是存放在的文件夹;

–runtime:运行命令必须要之;

ubuntu.16.04-x64:积存的文件夹名称

json 5

终极之结果是当目录:Debug\netcoreapp1.1
下边生成了一个ubuntu.16.04-x64文件夹,里面就是咋们的运作程序包了;假使您想大成其他系统的运转包也是均等的操作流程:

1.
以项目.csproj中加上对应的Runtime命令(如:win7-x64;osx.10-11-x64;ubuntu.16.04-x64);

  1. 当dotnet
    publish的时刻把最终一个参数改化对应之Runtime命令就举行了(如:ubuntu.16.04-x64)

及此本文就终止了,希望可以吃你带来好的提携,谢谢阅读;

相关文章

网站地图xml地图