-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
727 lines (411 loc) · 20.6 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
<!DOCTYPE HTML>
<html>
<head><meta name="generator" content="Hexo 3.8.0">
<meta charset="utf-8">
<meta name="baidu-site-verification" content="1pssZD9D7q">
<title>The CLR Daily | A world for dotnet and beyond</title>
<meta name="author" content="Liu Xia">
<meta id="viewport" name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta property="og:site_name" content="The CLR Daily">
<meta property="og:image" content="/favicon.ico">
<link href="/favicon.ico" rel="icon">
<link rel="alternate" href="/atom.xml" title="The CLR Daily" type="application/atom+xml">
<link rel="stylesheet" href="/css/style.css" media="screen" type="text/css">
</head>
<body>
<div class="blog">
<div class="content">
<header>
<div class="site-branding">
<h1 class="site-title">
<a href="/">The CLR Daily</a>
</h1>
<p class="site-description">A world for dotnet and beyond</p>
</div>
<nav class="site-navigation">
<ul>
<li><a href="/">主页</a></li>
<li><a href="/archives">归档</a></li>
</ul>
</nav>
</header>
<main class="site-main posts-loop">
<article>
<h3 class="article-title"><a href="/2019/08/13/csharp-7-in-a-nutshell-chinese-released/"><span>C# 7 核心技术指南(中文版)发布了</span></a></h3>
<div class="article-top-meta">
<span class="posted-on">
<a href="/2019/08/13/csharp-7-in-a-nutshell-chinese-released/" rel="bookmark">
<time class="entry-date published" datetime="2019-08-12T23:04:27.000Z">
2019-08-13
</time>
</a>
</span>
</div>
<div class="article-content">
<div class="entry">
<p><img src="/images/blog/csharp-in-nutshell-cover.jpg" style="text-align:center" alt="Book Cover"></p>
<p>大家好,经过我近两年的翻译,《C# 7.0 核心技术指南》终于和大家见面了。同时造成了 Daily 严重的拖更给大家道歉。作为一本第七次再版的图书,此次翻译对书中的字句进行了重新整理。期间和图书的原作者 Joe Albahari 确定了原书中 13 处问题并在中文版中全部予以修正。同时华章图书的编辑和社外编辑也进行了多轮次的校对和修正。力求为大家奉献一本读起来 “舒服” 的 C# 和 dotnet 图书。</p>
<p>C# 这门语言自 2002 年发布以来已经走过了 18 个年头。如果说这门语言在世纪之初十六年间都在慢跑的话那么这三年则是突飞猛进了。这种蓬勃的发展主要体现在三个层面上。第一,从语言本身的特性上,2017 到 2019 年这三年间语言的版本从 6.0 升级到了 8.0 preview,中间包含着五次正式的版本发布;第二,C# 和 .NET 有着紧密的关系。从平台上微软对 CLR 的开放态度前所未有,dotnet core 的发布真正的让它的跨平台能力不再停留在理论层面上,而其中的持续改进——不论是底层虚拟机层面上的改进还是在上层 Framework 的改进上——让它在各个技术雷达上逐步被主流的技术团队锁定;第三,各个云平台对 dotnet core 的支持不断完善。而 Azure 更是基于其上提供了各种个性化的服务。因此,不论从语言、平台、还是云服务,C# 和 dotnet 都展现了强劲的发展势头。</p>
<p><img src="/images/blog/2017-03-radar-sm.jpg" style="text-align:center" alt="Tech Radar 2017-03"></p>
<p><img src="/images/blog/2017-11-radar-sm.jpg" style="text-align:center" alt="Tech Radar 2017-11"></p>
<p><img src="/images/blog/2018-05-radar-sm.jpg" style="text-align:center" alt="2018-05"></p>
<p><em>图:2017-2018 年一年半之内 .net core 在 ThoughtWorks 技术雷达上惊艳的三连跳</em></p>
<blockquote>
<p>我们团队认为 <strong>.NET CORE</strong> 已经足够成熟,可以成为 <strong>.NET</strong> 服务器应用程序的默认平台。开源的 <strong>.NET Core</strong> 框架支持在 Windows、MacOS 和 Linux 操作系统上使用一流的跨平台工具来开发和部署 <strong>.NET</strong> 应用程序。微软提供了好用的 Docker 镜像,使得在容器化环境中部署 <strong>.NET Core</strong> 应用程序变得非常简单。其在社区中积极的发展方向和我们项目的反馈表明 —— <strong>.NET Core</strong> 是 <strong>.NET</strong> 应用开发的未来。</p>
<p>– ThoughtWorks 技术雷达第 18 期</p>
</blockquote>
<p>因此现在是入手 C# 和 dotnet 的绝佳时机。</p>
<p>但是从另一个方面。C# 毕竟是一门积累了 18 年的语言,最近的快速增长更极大的加重了学习的负担。虽然一些工具如 Microsoft IntelliSense 和在线文档可以为工作提供诸多便利,但若要使用它们仍需要一些现有的概念和知识体系作为支撑。本书以简明统一的方式(而非繁琐冗长的介绍)准确的阐释了这些知识。</p>
<ul>
<li>首先本书注重知识脉络,并适时地使用图表将联系可视化。</li>
<li>其次,它在其中引入了非常多的拥有非常强的实践意义的范例代码并对其进行详细的解释。书中的所有代码范例都可以直接在 LINQPad 中执行,省去了创建工程之苦。可以随时随地,马上书写,马上验证。这种 baby step 的解说方式非常适合自学。</li>
<li>第三,它内容涵盖 C# 语言,CLR 和 Framework 核心程序集。并特意的为一些难以理解的主题,例如并发性、安全性以及应用程序域留出了足够的篇幅。</li>
</ul>
<p>因此它是一本既照顾知识面又兼顾深度的好书。</p>
<p>在 <strong>机械工业出版社</strong> 和微软最有价值专家 <strong>张善友</strong> 的支持下我们在 <strong>dotnet 跨平台</strong> 和 <strong>每日 CLR 段子</strong> 公众号推出限时团购优惠活动。大家也可以扫描下方的二维码享受 6.5 折的优惠价格:</p>
<p><img src="/images/blog/tuangou-book-barcode.png" style="text-align:center" alt="Promote"></p>
</div>
</div>
<div class="article-footer">
<div class="article-meta pull-left">
<span class="post-tags">
<i class="icon-tags"></i>
<a href="/tags/csharp/">csharp</a><a href="/tags/book/">book</a>
</span>
</div>
<div class="article-meta pull-right">
<span>
<i class="icon-comments"></i>
<span>
<a href="/2019/08/13/csharp-7-in-a-nutshell-chinese-released/#comment">评论</a>
</span>
</span>
</div>
</div>
</article>
<article>
<h3 class="article-title"><a href="/2019/03/24/coremvc-structure-logging/"><span>ASP.NET Core 沉思录 - 结构化日志</span></a></h3>
<div class="article-top-meta">
<span class="posted-on">
<a href="/2019/03/24/coremvc-structure-logging/" rel="bookmark">
<time class="entry-date published" datetime="2019-03-24T07:26:59.000Z">
2019-03-24
</time>
</a>
</span>
</div>
<div class="article-content">
<div class="entry">
<p>在 《ASP.NET Core 沉思录 - Logging 的两种介入方法》中我们介绍了 ASP.NET Core 中日志的基本设计结构。这一次我们来观察日志记录的格式,并进一步考虑如何在应用程序中根据不同的需求选择不同的日志记录形式。</p>
<p><img src="/images/blog/core-mvc-logging-title-2.jpg" style="text-align:center" alt="write on hand"></p>
</div>
</div>
<div class="article-footer">
<div class="article-meta pull-left">
<span class="post-tags">
<i class="icon-tags"></i>
<a href="/tags/aspnetcore/">aspnetcore</a><a href="/tags/logging/">logging</a>
</span>
</div>
<div class="article-meta pull-right">
<span>
<i class="icon-comments"></i>
<span>
<a href="/2019/03/24/coremvc-structure-logging/#comment">评论</a>
</span>
</span>
</div>
</div>
</article>
<article>
<h3 class="article-title"><a href="/2019/03/19/coremvc-logging-structure/"><span>ASP.NET Core 沉思录 - Logging 的两种介入方法</span></a></h3>
<div class="article-top-meta">
<span class="posted-on">
<a href="/2019/03/19/coremvc-logging-structure/" rel="bookmark">
<time class="entry-date published" datetime="2019-03-19T12:00:33.000Z">
2019-03-19
</time>
</a>
</span>
</div>
<div class="article-content">
<div class="entry">
<p>ASP.NET Core 中依赖注入是一个很重要的环节。因为几乎所有的对象都是由它创建的(相关文章请参见《ASP.NET Core 沉思录 - ServiceProvider 的二度出生》)。因此整个日志记录的相关类型也被直接添加到了 <code>IServiceCollection</code> 中。今天我们将介绍各个接口/类型之间的关系,并找到介入日志记录功能的两个主要的入口。</p>
<p><img src="/images/blog/coremvc-logger.jpg" style="text-align:center" alt="wechat-app-barcode"></p>
</div>
</div>
<div class="article-footer">
<div class="article-meta pull-left">
<span class="post-tags">
<i class="icon-tags"></i>
<a href="/tags/aspnetcore/">aspnetcore</a><a href="/tags/dependency-injection/">dependency injection</a><a href="/tags/logging/">logging</a>
</span>
</div>
<div class="article-meta pull-right">
<span>
<i class="icon-comments"></i>
<span>
<a href="/2019/03/19/coremvc-logging-structure/#comment">评论</a>
</span>
</span>
</div>
</div>
</article>
<article>
<h3 class="article-title"><a href="/2019/03/11/coremvc-double-step-service-provider/"><span>ASP.NET Core 沉思录 - ServiceProvider 的二度出生</span></a></h3>
<div class="article-top-meta">
<span class="posted-on">
<a href="/2019/03/11/coremvc-double-step-service-provider/" rel="bookmark">
<time class="entry-date published" datetime="2019-03-11T02:19:23.000Z">
2019-03-11
</time>
</a>
</span>
</div>
<div class="article-content">
<div class="entry">
<p>ASP.NET Core 终于将几乎所有的对象创建工作都和依赖注入框架集成了起来。并对大部分的日常工作进行了抽象。使得整个框架扩展更加方便。各个部分的集成也更加容易。今天我们要思考的部分仍然是从一段每一个工程中都大同小异的代码开始的。</p>
</div>
</div>
<div class="article-footer">
<div class="article-meta pull-left">
<span class="post-tags">
<i class="icon-tags"></i>
<a href="/tags/aspnetcore/">aspnetcore</a><a href="/tags/dependency-injection/">dependency injection</a>
</span>
</div>
<div class="article-meta pull-right">
<span>
<i class="icon-comments"></i>
<span>
<a href="/2019/03/11/coremvc-double-step-service-provider/#comment">评论</a>
</span>
</span>
</div>
</div>
</article>
<article>
<h3 class="article-title"><a href="/2019/03/06/coremvc-determine-environment/"><span>ASP.NET Core 沉思录 - 环境的思考</span></a></h3>
<div class="article-top-meta">
<span class="posted-on">
<a href="/2019/03/06/coremvc-determine-environment/" rel="bookmark">
<time class="entry-date published" datetime="2019-03-06T14:36:57.000Z">
2019-03-06
</time>
</a>
</span>
</div>
<div class="article-content">
<div class="entry">
<p>今天我们来一起思考一下如何在不同的环境应用不同的配置。这里的配置不仅仅指 <code>IConfiguration</code> 还包含 <code>IWebHostBuilder</code> 的创建过程和 <code>Startup</code> 的初始化过程。</p>
</div>
</div>
<div class="article-footer">
<div class="article-meta pull-left">
<span class="post-tags">
<i class="icon-tags"></i>
<a href="/tags/aspnetcore/">aspnetcore</a><a href="/tags/environment/">environment</a>
</span>
</div>
<div class="article-meta pull-right">
<span>
<i class="icon-comments"></i>
<span>
<a href="/2019/03/06/coremvc-determine-environment/#comment">评论</a>
</span>
</span>
</div>
</div>
</article>
<article>
<h3 class="article-title"><a href="/2019/03/02/coremvc-create-web-host-builder/"><span>ASP.NET Core 沉思录 - CreateWebHostBuilder 是一个 Convension</span></a></h3>
<div class="article-top-meta">
<span class="posted-on">
<a href="/2019/03/02/coremvc-create-web-host-builder/" rel="bookmark">
<time class="entry-date published" datetime="2019-03-02T02:01:13.000Z">
2019-03-02
</time>
</a>
</span>
</div>
<div class="article-content">
<div class="entry">
<p>失踪人口回归。去年六月份开始,我开始翻译一千多页的《CSharp 7 in a Nutshell》到现在为止终于告一段落。我又回归了表世界。从这次开始我希望展开一个全新的主题。我叫它 ASP.NET Core 沉思录(多么高大上的名字,自我陶醉~)。今天是第一个主题。<code>CreateWebHostBuilder</code> 是一个 Convension。</p>
</div>
</div>
<div class="article-footer">
<div class="article-meta pull-left">
<span class="post-tags">
<i class="icon-tags"></i>
<a href="/tags/aspnetcore/">aspnetcore</a><a href="/tags/testing/">testing</a>
</span>
</div>
<div class="article-meta pull-right">
<span>
<i class="icon-comments"></i>
<span>
<a href="/2019/03/02/coremvc-create-web-host-builder/#comment">评论</a>
</span>
</span>
</div>
</div>
</article>
<article>
<h3 class="article-title"><a href="/2018/06/29/funny-csharp-date-1/"><span>【我好像遇到了假的 C#】2018年06月29日--datetime</span></a></h3>
<div class="article-top-meta">
<span class="posted-on">
<a href="/2018/06/29/funny-csharp-date-1/" rel="bookmark">
<time class="entry-date published" datetime="2018-06-29T00:05:08.000Z">
2018-06-29
</time>
</a>
</span>
</div>
<div class="article-content">
<div class="entry">
<p><img src="/images/blog/funny_csharp_datetime.jpg" style="text-align:center" alt="cui"></p>
<p>大家好,我上周去了异世界。这周我又回来了。时间又继续开始运行了。我们先回顾一下上次的问题吧。然后会按照惯例带来一个新的问题。今天的问题,是关于万年坑,日期和时间的。</p>
</div>
</div>
<div class="article-footer">
<div class="article-meta pull-left">
<span class="post-tags">
<i class="icon-tags"></i>
<a href="/tags/csharp/">csharp</a><a href="/tags/generic/">generic</a><a href="/tags/datetime/">datetime</a>
</span>
</div>
<div class="article-meta pull-right">
<span>
<i class="icon-comments"></i>
<span>
<a href="/2018/06/29/funny-csharp-date-1/#comment">评论</a>
</span>
</span>
</div>
</div>
</article>
<article>
<h3 class="article-title"><a href="/2018/06/20/funny-csharp-dos-generic/"><span>【我好像遇到了假的 C#】2018年06月20日--generic</span></a></h3>
<div class="article-top-meta">
<span class="posted-on">
<a href="/2018/06/20/funny-csharp-dos-generic/" rel="bookmark">
<time class="entry-date published" datetime="2018-06-19T23:55:57.000Z">
2018-06-20
</time>
</a>
</span>
</div>
<div class="article-content">
<div class="entry">
<p>Hello 大家好,我们除【我好像遇到了假的 C#】这个系列之外,也在酝酿着一些成系统的系列哦。敬请期待。今天的问题来源于我从 <a href="https://blogs.msdn.microsoft.com/ericlippert/2011/02/03/curiouser-and-curiouser/" target="_blank" rel="noopener">Eric Lippert</a> 的博客上的一篇文章。</p>
</div>
</div>
<div class="article-footer">
<div class="article-meta pull-left">
<span class="post-tags">
<i class="icon-tags"></i>
<a href="/tags/csharp/">csharp</a><a href="/tags/generic/">generic</a>
</span>
</div>
<div class="article-meta pull-right">
<span>
<i class="icon-comments"></i>
<span>
<a href="/2018/06/20/funny-csharp-dos-generic/#comment">评论</a>
</span>
</span>
</div>
</div>
</article>
<article>
<h3 class="article-title"><a href="/2018/06/17/funny-csharp-conditional/"><span>【我好像遇到了假的 C#】2018年06月18日--conditional</span></a></h3>
<div class="article-top-meta">
<span class="posted-on">
<a href="/2018/06/17/funny-csharp-conditional/" rel="bookmark">
<time class="entry-date published" datetime="2018-06-17T01:31:41.000Z">
2018-06-17
</time>
</a>
</span>
</div>
<div class="article-content">
<div class="entry">
<p>Hello 大家好,端午假期明天就要可喜可贺的结束了(对于壕除外,因为假期仅仅过了一半还不到:-D),于是我们来更新一把,继续学习吧。今天带来了一个关于诊断的问题哦。</p>
</div>
</div>
<div class="article-footer">
<div class="article-meta pull-left">
<span class="post-tags">
<i class="icon-tags"></i>
<a href="/tags/csharp/">csharp</a><a href="/tags/diagnostics/">diagnostics</a><a href="/tags/conditional/">conditional</a><a href="/tags/attribute/">attribute</a>
</span>
</div>
<div class="article-meta pull-right">
<span>
<i class="icon-comments"></i>
<span>
<a href="/2018/06/17/funny-csharp-conditional/#comment">评论</a>
</span>
</span>
</div>
</div>
</article>
<article>
<h3 class="article-title"><a href="/2018/06/13/funny-csharp-unicode/"><span>【我好像遇到了假的 C#】2018年06月14日--unicode</span></a></h3>
<div class="article-top-meta">
<span class="posted-on">
<a href="/2018/06/13/funny-csharp-unicode/" rel="bookmark">
<time class="entry-date published" datetime="2018-06-13T15:40:55.000Z">
2018-06-13
</time>
</a>
</span>
</div>
<div class="article-content">
<div class="entry">
<p>Hello 大家好,本星期我要和娃一起开心的玩耍,所以更新缓慢了些。上一期的问题非常有趣。不知道大家有没有得出自己的结论呢。老规矩我们还是看一下上一期的问题。本期我们转战另一个战场,嗯,字符串。谁知道字符串上可能会发生什么好玩儿的事情呢对吧。</p>
</div>
</div>
<div class="article-footer">
<div class="article-meta pull-left">
<span class="post-tags">
<i class="icon-tags"></i>
<a href="/tags/csharp/">csharp</a><a href="/tags/unicode/">unicode</a><a href="/tags/string/">string</a>
</span>
</div>
<div class="article-meta pull-right">
<span>
<i class="icon-comments"></i>
<span>
<a href="/2018/06/13/funny-csharp-unicode/#comment">评论</a>
</span>
</span>
</div>
</div>
</article>
<nav class="pagination">
<a href="/page/2/" class="pagination-next">下一页</a>
</nav>
</main>
<footer class="site-footer">
<p class="site-info">
Proudly powered by <a href="https://hexo.io/" target="_blank">Hexo</a> and
Theme by <a href="https://github.com/CodeDaraW/Hacker" target="_blank">Hacker</a>
<br>
© 2019 Liu Xia
</p>
</footer>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-47369838-1', 'auto');
ga('send', 'pageview');
</script>
</div>
</div>
</body>
</html>