<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Visual Studio on Hi Work Notes</title><link>/visualstudio/</link><description>Recent content in Visual Studio on Hi Work Notes</description><generator>Hugo</generator><language>zh-CN</language><copyright>Hi Work Notes 2026</copyright><lastBuildDate>Tue, 10 Mar 2026 15:55:34 +0800</lastBuildDate><atom:link href="/visualstudio/index.xml" rel="self" type="application/rss+xml"/><item><title>版权</title><link>/visualstudio/copyright/</link><pubDate>Tue, 10 Mar 2026 15:55:34 +0800</pubDate><guid>/visualstudio/copyright/</guid><description>&lt;h2 id="版权"&gt;版权&lt;/h2&gt;
&lt;p&gt;通常，.NET 基金会中项目的版权声明如下：
&amp;ldquo;Copyright (c) .NET Foundation and Contributors. All Rights Reserved&amp;rdquo;.
版权声明应放在项目的 LICENSE 文件中，因此 MIT 许可项目的 LICENSE 开头如下：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;The MIT License (MIT)
Copyright (c) .NET Foundation and Contributors
All Rights Reserved
Permission is hereby granted...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Apache 2.0 许可项目的 LICENSE 则以如下内容开头：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Copyright (c) .NET Foundation and Contributors
All Rights Reserved
Apache License, Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在项目中引入第三方开源代码时，任何第三方的版权声明都应随代码一起保留。一种很好的做法是，把项目中需要展示的第三方声明汇总到项目根目录下名为 NOTICE.md（或 ThirdPartyNotices.txt）的文件中。&lt;/p&gt;
&lt;h2 id="文件头"&gt;文件头&lt;/h2&gt;
&lt;p&gt;以下文件头格式用于 .NET Foundation 项目。请在新文件中使用该格式，并酌情更新现有代码文件的文件头。注意，项目的一般版权声明在项目的 LICENSE 文件中给出，但任何第三方的版权声明都应保留。&lt;/p&gt;</description></item><item><title>关于 EditorConfig 文件</title><link>/visualstudio/editorconfig/</link><pubDate>Tue, 10 Mar 2026 15:55:34 +0800</pubDate><guid>/visualstudio/editorconfig/</guid><description>&lt;p&gt;EditorConfig 有助于为跨不同编辑器和 IDE 处理同一项目的多个开发人员保持一致的编码风格。&lt;/p&gt;
&lt;p&gt;EditorConfig 项目由用于定义编码样式的文件格式和文本编辑器插件集合组成，这些插件使编辑器能够读取文件格式并遵循定义的样式。EditorConfig 文件易于读取，并且与版本控制系统配合得很好。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://editorconfig.org"&gt;https://editorconfig.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Visual Studio 2019 及更高版本支持 EditorConfig 文件，可以在 Visual Studio 中使用 EditorConfig 文件来定义和维护代码样式设置。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/dotnet/aspnetcore/blob/main/.editorconfig"&gt;https://github.com/dotnet/aspnetcore/blob/main/.editorconfig&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;// Licensed to the .NET Foundation under one or more agreements.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;// The .NET Foundation licenses this file to you under the MIT license.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the &amp;lt;&amp;lt;LICENSE_TYPE&amp;gt;&amp;gt; license.
// See the LICENSE file in the project root for more information.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在 Visual Studio 中使用 EditorConfig 文件添加文件头版权信息。&lt;/p&gt;</description></item><item><title>如何优雅使用 Git 版本控制</title><link>/visualstudio/git-with-visual-studio/</link><pubDate>Tue, 10 Mar 2026 15:55:34 +0800</pubDate><guid>/visualstudio/git-with-visual-studio/</guid><description>&lt;h2 id="git-简介"&gt;Git 简介&lt;/h2&gt;
&lt;p&gt;Git 是一个开源的分布式版本控制系统，用于敏捷高效地处理任何或小或大的项目。&lt;/p&gt;
&lt;h2 id="克隆存储库"&gt;克隆存储库&lt;/h2&gt;
&lt;p&gt;将远程存储库克隆到本地，在本地进行修改，然后提交到远程存储库。&lt;/p&gt;
&lt;h2 id="创建存储库"&gt;创建存储库&lt;/h2&gt;
&lt;p&gt;在本地创建存储库，然后将本地存储库推送到远程存储库。关于代码存储库的命名规范使用，使用 KebabCaseLower 命名法。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Naming policy&lt;/th&gt;
&lt;th&gt;Original&lt;/th&gt;
&lt;th&gt;Converted&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PascalCase&lt;/td&gt;
&lt;td&gt;HelloShop&lt;/td&gt;
&lt;td&gt;HelloShop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CamelCase&lt;/td&gt;
&lt;td&gt;HelloShop&lt;/td&gt;
&lt;td&gt;helloShop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SnakeCaseLower&lt;/td&gt;
&lt;td&gt;HelloShop&lt;/td&gt;
&lt;td&gt;hello_shop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SnakeCaseUpper&lt;/td&gt;
&lt;td&gt;HelloShop&lt;/td&gt;
&lt;td&gt;HELLO_SHOP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KebabCaseLower&lt;/td&gt;
&lt;td&gt;HelloShop&lt;/td&gt;
&lt;td&gt;hello-shop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KebabCaseUpper&lt;/td&gt;
&lt;td&gt;HelloShop&lt;/td&gt;
&lt;td&gt;HELLO-SHOP&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="本地仓库设置"&gt;本地仓库设置&lt;/h2&gt;
&lt;p&gt;Git 设置包括全局设置和存储库设置，可设置多个远程存储库。&lt;/p&gt;
&lt;h3 id="说明文件"&gt;说明文件&lt;/h3&gt;
&lt;p&gt;在存储库中创建一个名为 README.md 的文件，用于存放存储库的说明文档，当然如果可能每个文件夹都应该有一个说明文档。&lt;/p&gt;
&lt;h3 id="忽略文件"&gt;忽略文件&lt;/h3&gt;
&lt;p&gt;gitignore 文件的作用是指定不需要提交到代码存储库的文件，例如编译后的文件、日志文件等。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/github/gitignore/blob/main/VisualStudio.gitignore"&gt;https://github.com/github/gitignore/blob/main/VisualStudio.gitignore&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="常规操作"&gt;常规操作&lt;/h2&gt;
&lt;p&gt;提取、拉取、提交、推送、同步、回滚、标签、冲突、暂存（行）、拉取。&lt;/p&gt;
&lt;h2 id="分支管理"&gt;分支管理&lt;/h2&gt;
&lt;p&gt;存储库分支用于管理存储库的版本，例如 master，develop，release，hotfix, feature 等。主要操作包括：创建分支，切换分支，合并分支，删除分支。&lt;/p&gt;
&lt;h2 id="存储库管理"&gt;存储库管理&lt;/h2&gt;
&lt;p&gt;浏览存储库、管理存储库、使用多个存储库、解决合并冲突。&lt;/p&gt;</description></item><item><title>使用 Visual Studio 2022 中的 .HTTP 文件</title><link>/visualstudio/use-http-files/</link><pubDate>Tue, 10 Mar 2026 15:55:34 +0800</pubDate><guid>/visualstudio/use-http-files/</guid><description>&lt;h2 id="注释"&gt;注释&lt;/h2&gt;
&lt;p&gt;以 # 或 // 开头的行是注释，当 Visual Studio 发送 HTTP 请求时，将忽略这些行。&lt;/p&gt;
&lt;h2 id="变量"&gt;变量&lt;/h2&gt;
&lt;p&gt;以 @ 开头的行使用语法 @VariableName=Value 定义变量。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-http" data-lang="http"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;@hostname=localhost
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;@port=44320
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;GET https://{{hostname}}:{{port}}/weatherforecast
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="多个请求"&gt;多个请求&lt;/h2&gt;
&lt;p&gt;请求格式为：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-http" data-lang="http"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;[&amp;lt;HTTP-verb&amp;gt;] &amp;lt;url&amp;gt; [&amp;lt;HTTP-version&amp;gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;[&amp;lt;request-headers&amp;gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;[&amp;lt;request-body&amp;gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-http" data-lang="http"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;GET https://localhost:7220/weatherforecast
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;###
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;GET https://localhost:7220/weatherforecast?date=2023-05-11&amp;amp;location=98006
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;###
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;GET&lt;/span&gt; &lt;span class="nn"&gt;https://localhost:7220/weatherforecast&lt;/span&gt; &lt;span class="kr"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="g"&gt;###
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="请求标头"&gt;请求标头&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-http" data-lang="http"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;GET https://localhost:7220/weatherforecast
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;Date: Wed, 27 Apr 2023 07:28:00 GMT
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;###
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;GET https://localhost:7220/weatherforecast
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;Cache-Control: max-age=604800
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;Age: 100
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;###
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="请求正文"&gt;请求正文&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-http" data-lang="http"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;POST https://localhost:7220/weatherforecast
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;Content-Type: application/json
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; &amp;#34;date&amp;#34;: &amp;#34;2023-05-11&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; &amp;#34;location&amp;#34;: &amp;#34;98006&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="使用模板创建-http-文件"&gt;使用模板创建 HTTP 文件&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;右键单击 ASP.NET Core 项目&lt;/li&gt;
&lt;li&gt;添加&amp;gt;新建项&lt;/li&gt;
&lt;li&gt;ASP.NET Core&amp;gt;常规&lt;/li&gt;
&lt;li&gt;选择 HTTP 文件，然后选择添加&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="使用终结点资源管理器"&gt;使用终结点资源管理器&lt;/h2&gt;
&lt;p&gt;视图&amp;gt;其他窗口&amp;gt;终结点资源管理&lt;/p&gt;</description></item></channel></rss>