本章将与大家分享ASP后如何打包生成跨平台包。netcore版本删除了project.json .为了更好的跟进ASP的开发。NET Core,vs2015,之前用于AspNetCore开发,卸载安装。给我带来的直接好处就是腾出了10GB左右的空间给我的红色c盘,从这里我可以直接感受到vs2017是那么的小;之前写过一篇关于开源netcore服务的文章,开源了一个跨平台的服务插件——taskkore。MainForm,它有一个在win7和ubuntu16.04系统上生成和部署netcore项目的示例。有兴趣的朋友可以去看看;让我们开始这篇文章的内容。希望你能喜欢。我也希望你能有更多的‘扫码支持’和‘推荐’。谢谢大家!
会话在AspNetCore中使用(基于MemoryCache组件)
这一节似乎和文章的标题有点不一致,主要是因为内容太少,无法编写和生成跨平台的包。有些朋友觉得工作太少不满意,如果用Session来填充就用这个。哈哈(我的哲学是:一天一个进步,哪怕是一点点);对于一个网络程序,通常有很多方法来存储会话。例如,在我的上一篇文章中,我使用Redis来存储会话。对于netcore项目,存储会话的默认方式是memorycache。您可以将以下代码片段添加到项目的Startup.cs文件中的ConfigureServices方法中:
服务。AddDistributedMemoryCache();服务。addSession(b={ b . idle time out=TimeSpan。from MINUTES(1);5b . CookieName=' MySid ';});并添加app。在Configure方法中使用session();会议的使用;将上述代码片段复制到你的程序中时,会出现一个小灯泡的提示,需要点击选择引用下对应的包。对于vs2017,会自动安装netcore开发环境,所以只需要点击灯泡参考即可。如果您没有安装开发sdk,则需要下载nuget软件包:Microsoft。aspnet core . session;第一部分服务。adddistributedmemorycache()主要用于添加memorycache存储引用,AddSession方法的第二部分是真正添加一些与Session相关的东西。这里我使用两个属性:
1.IdleTimeout:设置会话到期时间;
2.CookieName:设置客户端浏览器中存储的sessionId的键名;
完成上述步骤后,您可以使用HttpContext添加会话。会话。在任何控制器(此处为家庭控制器)的操作中设置方法:
public interaction result About(){ _ logger . login information('这里是关于');Var userInfo=“我的网络核心的会话”;HttpContext。会话。设置(会话密钥,系统。text . encoding . utf8 . getbytes(userInfo));视图数据['消息']=$ '读取配置文件选项1的节点值:{this。_选项。选项1},添加会话';返回视图();}在另一个联系人的操作中使用httpcontext . session . trygetvalue(session key,outvarbt)来获取我们刚刚设置的会话:
public IActionResult Contact(){ var userInfo=string。空的;if (HttpContext。会话。尝试获取值(会话密钥,输出变量bt)) {用户信息=系统。text . encoding . utf8 . getstring(Bt);}视图数据['消息']=字符串。isnullorhitespace(userInfo)?会话获取为空' : userInfo返回视图();}好吧,就这么简单。我们来运行看看效果:不用运行命令运行测试站点,不出意外会在界面上得到如下截图:
通过浏览器控制台,我们可以看到他们的sessionId的名字是MySid,就像我们在Startup.cs中设置的CookieName一样;
ISession扩展方法
上面使用的Set方法用于保存会话。我们来看看她的参数void Set(字符串键,字节[]值);键值对,但该值是字节[]类型参数。对于我们来说,每次使用时更改数据类型并不太方便,所以我们通过扩展方法来扩展ISession,并扩展代码如下:
公共静态类公共扩展{ # region }是会话扩展///摘要///设置session////summary///type param name=' T '/type param///param name=' session '/param///param name=' key '/param///param name=' val '/param///returns/returns public static bool SEt(此ISession会话,字符串键,T值){ if(字符串.isnullorhitespace(key)| | val==null){ return false;} var strVal=JsonConvert .SerializeObject(val);var bb=编码. UTF8。GetBytes(Strval);会话设置(键,bb);返回真;} ///摘要///获取session////summary///type param name=' T '/type param///param name=' session '/param///param name=' key '/param///returns/returns public static T GetT(此ISession会话,字符串键){ var T=default(T);如果(字符串is nullorhitespace(key)){ return t;}如果(会话TryGetValue(键,输出字节[] val)) { var strVal=编码.UTF8。getStrIng(val);t=JsonConvert .反序列化对象(Strval);}返回t;} #endregion }直接传递一个对象T到扩展方法中,转类型后再存储的会议中去,为了更好的测试我们直接在上面测试用例上修改代码如:
public IActionResult About(){ _ logger .'登录信息('这里是关于');//var userInfo='我的NetCore之会话;//HttpContext .会话。设置(会话密钥,系统文本。编码。utf8。getbytes(UserInfo));捕鼠动物用户=new MouseR();HttpContext .会话。SetMoUser(SessionKey,用户);视图数据['消息']=$ '读取配置文件选项一节点值:{这个。_选项。选项1},添加会话;返回视图();} public IActionResult Contact(){//var userInfo=string .空的;//if (HttpContext .会话。TryGetValue(SessionKey,out var bt)) //{ //userInfo=System .文字。编码。utf8。get string(Bt);//}//视图数据['消息']=字符串isnullorhitespace(userInfo)?会议获取为空: userInfovar user=HttpContext .会话。GetMoUser(会话密钥);视图数据['消息']=用户==空?会议获取为空' : $'昵称:{用户“. UserName }”;返回视图();}看起来设置或得到的会议操作都只需一句代码就完成了是不是方便了许多呢,最有命令:dotnet运行测试下效果,和上面的一样我就不截图了;
1.1版本去掉了project.json后,如何生成跨平台包
到这里就进入今天的正题了,对于最新版本网络核心去掉project.json网上讨论的还算比较激烈,但是网搜了下还没有一篇正式的中文文章来讲述如果生成夸平台包,这里有幸或许吧成为第一篇吧呵呵;首先,要明了网络核心小组去掉project.json重要文件后,其任务都放在了项目的csproj .文件中,没错就是咋们相对生成的项目工程文件,那上面测试用例为例我们看下csproj .文件的内容:
Project Sdk='Microsoft .NET。Sdk。web '属性组TargetFrameworknetcoreapp1.1/目标框架/属性组属性组PackageTargetFallback $(PackageTargetFallback);便携式-网45胜8 wp8 wpa 81/PackageTargetFallback/property组项组包引用Include=' Microsoft .应用洞察。AspNetCore“版本=”2。0 .0 '/包引用Include=' Microsoft .AspNetCore“版本=”1。1 .1 '/包引用Include=' Microsoft .AspNetCore。Mvc“版本=”1。1 .2 '/包引用Include=' Microsoft .会话'版本='1.1.1' /包引用包含='微软。版本=' 1 .1 .1 '/包引用Include=' Microsoft .扩展。日志记录。调试'版本='1.1.1' /包引用包含='微软. VisualStudio。网络。浏览器链接“版本=”1。1 .0 '/项组/项组dotnetclitool引用Include=' Microsoft .visual studio。网络。代码生成。工具'版本=' 1。0 .0 '/项目组/项目这里能够直观的在项目组节点看到我们添加进来的会议的引用和项目模板自带的记录等的引用,已经父节点Project Sdk='Microsoft .NET。' Sdk.Web ',我们要生成跨平台运行包,就需要操作这个项目文件的配置信息,这里只需要添加如下代码:
property group runtimeidentifier win 7-x64;Ubuntu . 16.04-x64/runtimeidentifiers/property group,然后通过发出命令,可以生成一个kua平台包。是不是很简单,所以上面做了一个Session节来做干货?我们来测试一下。首先,在项目的根目录下执行如下命令:不要还原
然后执行你的短发布命令(这里我直接默认参数执行,发布包会在bin下生成):dotnet publish
这时我们可以看到目录下的发布文件夹:binDebugnetcoreapp1.1,这里是程序执行文件。为了测试效果,这里我通过命令运行我的测试用例项目:Dontnet WebApp01.dll(因为我在这里安装了sdk,所以可以直接运行):
这里完成了一个运行在windows上的包,有些朋友开始对你之前配置的跨平台和runtimeidentifier win 7-x64感到疑惑;Ubuntu . 16.04-x64/运行时标识符有什么影响?让我们演示如何生成Ubuntu.16.04-x64的运行包(win7-x64也是如此)。我们还需要经历:dontnet restore,并在发出命令时写下这一点:
dotnet publish-f netcoreapp 1.1-runtime Ubuntu . 16.04-x64
命令描述:
-f:缩写-f:框架;
Netcoreapp1.1:是存储它的文件夹;
- runtime:运行命令所需的;
Ubuntu.16.04-x64:存储的文件夹名称
最终的结果是在目录下生成了一个ubuntu.16.04-x64文件夹:Debugnetcoreapp1.1,其中包含正在运行的包。如果要生成其他系统的运行包,同样的操作流程也是正确的:
1.在项目中添加相应的Runtime命令。csproj(例如win 7-x64;OSX . 10-11-x64;Ubuntu . 16.04-x64);
2.发布dot net时,只需将最后一个参数更改为相应的Runtime命令即可(例如,ubuntu.16.04-x64)
本文到此结束,希望能给大家带来好的帮助,感谢阅读;
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。