.NET中文官方博客
免费、 跨平台、 开源。一个用于构建所有应用程序的开发人员平台
Latest posts
如何将 .NET Aspire 应用程序部署到 Azure Container App
本篇翻译于Jiachen Jiang的 How to deploy .NET Aspire apps to Azure Container Apps 最近发布的用于构建云原生应用程序的 .NET Aspire 与 Azure Container App (ACA) 非常匹配。.NET Aspire 旨在轻松管理由一系列相互依赖的微服务组成的应用程序。Azure Container App专为微服务量身定制。它基于云原生技术构建,这意味着 .NET Aspire 可以无缝集成到其中 - 开箱即用! 最重要的是,.NET Aspire 堆栈通过 Azure Developer CLI (AZD) 为 ACA 提供定制的部署体验,让您可以使用单个命令为 Aspire 解决方案创建、配置和部署 Azure 资源。 在这篇博文中,我们讨论了在 ACA 中托管应用程序与非托管集群相比的优势。我们还将通过示例代码向您展示如何轻松上手。 为什么选择 Azure Container App? Azure Container App(ACA) 是一个用于运行容器优先应用程序和微服务的平台。它由 Kubernetes 提供支持,但对于普通开发人员来说使用和管理要简单得多。使用 ACA 的团队可以专注于构建应用程序并投入生产,而不必只是为了入门就必须去学习复杂的集群管理。 如果你想要有灵活性并且最大限度地降低成...
使用 SortableJS 组件的 Blazor 可排序列表
本篇翻译于Burke Holland的Sortable Lists for Blazor using a SortableJS Component 在Web 应用程序中,一个常见功能部分是可排序列表。SortableJS是我最喜欢的 JavaScript 库之一,在进行 Blazor 开发时我很想念它。为了解决这个问题,我决定包装 SortableJS 库,使其成为 Blazor 组件,名为Bazor Sortable,我已在 GitHub 上开源了它,我相信您会喜欢它的。在这篇文章中,我将引导您了解如何将其添加到您自己的 Blazor Web 应用程序中。 注意:Blazor Sortable 是一个开源社区组件,而不是 Microsoft 的官方组件。Blazor的 Fluent UI团队正在致力于在即将发布的 Blazor的Fluent UI 版本中集成可排序组件。您现在可以尝试Fluent UI Sortable Demo。 请在这里查看演示: https: //blazorsortable.theurlist.com 每周五,Jon Galloway(虽然你可能从未听说过他,但他值得信赖)和我致力于在 Blazor 中重建一个名为theurlist.com的应用程序。该直播在 Twitch 和 .NET YouTube 上被称为“ Burke Learns Blazor ”(点赞...
适用于 .NET 的 Azure Migrate 应用程序和代码评估工具
本篇翻译于Olia Gavrysh的Announcing the Azure Migrate application and code assessment tool for .NET - .NET Blog (microsoft.com) 我们很高兴地宣布我们将发布一项新工具,它可以帮助您将本地 .NET 应用程序迁移到 Azure。 Azure Migrate 应用程序和.NET代码评估工具(简称 AppCAT)让您能够评估应用程序的 .NET 源代码、配置和二进制文件,识别将应用程序迁移到 Azure 的过程中可能潜在的问题和概率。它有助于发现应用程序在移植到 Azure 时可能遇到的问题,并通过推荐现代的云原生解决方案来提高性能、可扩展性和安全性。 运行分析后,该工具将向您显示一份报告,报告会列举您可能需要检查或更改的所有事项,以确保您的应用程序从本地迁移到 Azure 后能够正常工作。 AppCAT 通过对代码及其依赖项进行静态代码分析来发现应用程序技术的使用情况。 它还允许您直接跳转到需要您注意的代码行,从而解决问题并将其标记为已修复,最后这个工具会保存问题的当前状态和报告,这样您或您的同事可以准确地从您上次修改过的地方重新开始。 该工具可以帮您估算修复每个问题所需的工作量并且它还能对应用程序和整个项目的组件进行评估。 它将提供有关如何解决问题的详细指导,并链接到 Mic...
F# 中更安全的递归
本篇翻译于David Schaefer的Safer recursion in F#。 这是David Schaefer的客座博客文章。David 是一名专注于函数式编程的自由软件开发人员。他是G-Research开源团队的一员。他致力于改进 F# 开发者工具的生态系统。此外,他还帮助维护各种开源的 F# 项目。 在函数式编程中,用递归的方式去定义算法是很常见的场景。这非常符合我们想要避免突变的心态,而且这通常不会导致性能下降。编译器在优化阶段会尝试将递归定义重写为更高效的循环。 然而,编译器并不总是能够将递归转换为循环。从这里开始,就有一定的危险了。 堆栈帧与生产环境 当我们在函数 f 内部调用函数 g 时,这个操作通常会在进程的调用堆栈上创建一个新的堆栈帧。函数g完成后,程序此时就不再需要它的堆栈帧了,从而可以重用它的空间。 现在,理解堆栈帧的创建对于递归函数是至关重要的。一般来说,对于每个递归调用,都会创建一个新的堆栈帧。在开发期间,当规模较小时,这通常不会引起问题。但在后期的生产环境中,随着规模的扩大,程序会因堆栈溢出而突然崩溃。 在生产环境中,由于递归调用创建了太多堆栈帧,堆栈的所有空间都被用完了,所以runtime决定停止它。 为了演示这一场景,请看一下这个递归函数: 生成的 IL 代码如下所示: 您可以在 IL_0009 处看到递归调用。 当使用 ...
这次我们的代码覆盖工具带来了哪些新功能?
本篇翻译于Jakub Chocholowicz的What's New in Our Code Coverage Tooling? 我们带来了一个让开发者非常兴奋的消息!我们更新了代码覆盖工具 Microsoft.CodeCoverage 和 dotnet-coverage,带来了一些出色的功能。如果您不熟悉我们的工具,请查看入门指南。让我们深入了解这些将简化编码体验的改动。 支持所有平台 由于添加了静态检测,我们的工具可以在任何.NET支持的平台上运行。了解有关静态和动态检测的更多信息,并探索其他支持的平台。 新的报告格式 我们改进了代码覆盖率报告格式,以便代码覆盖工具与 ReportGenerator 等其他工具可以顺利集成。 虽然默认值仍然是熟悉的 .coverage 格式,但我们引入了一些新格式: dotnet-coverage 隆重推出我们的新工具 dotnet-coverage!它执行以下任务: 请访问dotnet-coverage文档以了解更多信息。 自动合并解决方案 现在,在解决方案层级运行dotnet test --collect "Code Coverage"会自动合并所有测试项目的代码覆盖率。请访问解决方案的场景 24 代码覆盖率以查看完整示例。 改进的文档 您可以浏览我们...
.NET 8 网络改进
本篇翻译于Máňa和Natalia Kondratyeva的.NET 8 Networking Improvements - .NET Blog (microsoft.com) 随着新的.NET 版本的发布,发表有关网络空间中新的有趣变化的博客文章已经成为一种传统。今年,我们要介绍HTTP部分的变化、新增指标、新的HttpClientFactoryAPI 等。 HTTP 指标 .NET 8 使用 .NET 6 中引入的 System.Diagnostics.Metrics API 将内置 HTTP 指标添加到 ASP.NET Core 和 HttpClient。Metrics API 和新内置指标的语义都是与 OpenTelemetry 密切合作设计的,确保新指标符合标准,并与 Prometheus 和 Grafana 等流行工具良好配合。 System.Diagnostics.MetricsAPI 引入了许多 EventCounters 所缺少的新功能。新的内置指标广泛利用了这些功能,从而通过更简单、更优雅的工具实现了更广泛的功能。举几个例子: Histograms允许我们能够报告持续时间,例如请求持续时间 ( http.client.request.duration) 或连接持续时间 ( http.client.connection.duration)。这些是没有 EventCoun...
.NET 8 中 Android 资源生成的改进和变化
本篇翻译于Dean Ellis的 Improvements & Changes in Android resource generation in .NET 8 - .NET Blog (microsoft.com) 随着 .NET 8 的发布,我们引入了一个新系统,用于生成访问 Android 资源的 C# 代码。 在 Xamarin.Android、.NET 6 和 .NET 7 中生成 Resource.designer.cs 文件的系统已经被弃用。 新系统生成一个名为 _Microsoft.Android.Resource.Designer 程序集。其中包含每个程序集的所有最终资源类。 什么是 Android 资源? 所有 Android 应用程序都包含一些用户界面资源。它们通常具有 XML 文件形式,包含用户界面布局、png 或 svg 文件形式的图像和图标以及包含样式和主题等内容的值。请参阅 Google 文档以深入了解 Android 资源。 Android构建过程的一部分是使用android sdk工具aapt2将这些资源编译成二进制形式。为了访问这些资源,android 公开了一个 API,它允许您传递一个整数 id 来检索资源。 作为 aapt2 构建过程的一部分,将生成文件 R.txt,其中包含从资源的“string”名称到 Id 的映射。例如,layout/...
官宣.NET 8的发布
本篇翻译于Gaurav Seth的Announcing .NET 8 - .NET Blog (microsoft.com) 我们很高兴地宣布从今天开始 .NET 8正式发布,它是世界领先的开发平台之一的最新 LTS 版本。.NET 8 提供了数以千计的性能、稳定性和安全性改进,以及平台和工具增强功能,有助于提高开发人员的工作效率和创新速度。在为期三天(11 月 14 日至 16 日)的 .NET Conf 2023 上,.NET 团队、我们的合作伙伴和 .NET 社区将讨论 .NET 8 中的新增功能以及人们使用 .NET 构建的内容,以满足未来的需求。快来加入我们吧! 在这个版本中,.NET 重塑了我们构建可按需扩展的智能、云原生应用程序和高流量服务的方式。无论您是部署到 Linux 还是 Windows,使用容器还是您选择的云应用程序模型,.NET 8 都可以让您更轻松地构建这些应用程序。它包括一组经过验证的库,目前 Microsoft 的许多大规模服务都在使用这些库,可以帮助您应对可观察性、弹性、可扩展性、可管理性等方面的基本挑战。 将大型语言模型 (LLM)(如OpenAI 的 GPT) 直接集成到您的 .NET 应用程序中。Blazor 使用单个强大的组件模型来处理您的所有 Web UI 需求。使用 .NET MAUI 将您的移动应用程序部署到最新版...
System.IO 的便利性
本篇翻译于Richard Lander的The convenience of System.IO - .NET Blog (microsoft.com) 与其他形式的 I/O 一样,读写文件很常见的。文件 API 用于读取应用程序配置、缓存内容以及将数据(从磁盘)加载到内存中以执行一些计算,例如(今天的主题)字数统计。File、FileInfo、FileStream和相关类型为需要访问文件的 .NET 开发人员完成了大量繁重的工作。在这篇文章中,我们将在System.Text API的帮助下了解使用System.IO读取文本文件的便利性和性能。 我们最近启动了关于.NET 便利性的系列博客,该系列描述了我们为常见任务提供便捷解决方案的方法。System.Text.Json 的便利性是本系列中的另一篇文章,介绍如何读取和编写 JSON 文档。为什么选择.NET?则描述了支持这些文章中涵盖的解决方案的架构选择。 这篇文章分析了文件 I/O 和文本 API 在大型小说中用于计算行数、字数和字节数的便利性和性能。结果表明,高级 API 易于使用,性能优异,而较低级别的 API 需要付出更多努力才能提供出色的效果。您还将看到本机 AOT如何将 .NET 应用程序启动的性能表现提升到一个新的级别。 The APIs 基准测试中使用了以下 File API(及其配套 API)。 ...