visualstudio
文章平均质量分 96
walter lv
这个作者很懒,什么都没留下…
展开
-
Unity3D 入门:使用 Visual Studio 开发 Unity C# 脚本,说说根目录的那些 sln 和 csproj 文件
本文介绍 Unity3D 项目根目录的 sln 和 csproj 文件,你将知道如何正确理解和使用它们。对于传统 .NET/C# 的开发者来说,在解决方案中管理 NuGet 包,在 C# 项目中引用 dll 或 NuGet 包是家常便饭。但在 Unity 项目里面,你可能要改变这一观念——因为 Unity 项目里面实际上并不存在 sln 和 csproj 文件。等等!那我们在根目录看到的那些 sln 和 csproj 文件是什么?那只是 Unity 编辑器为了让你方便写 C# 代码临时生成给你用的原创 2020-06-30 09:53:27 · 4402 阅读 · 1 评论 -
git 如何更可靠地解决冲突?
使用 git 合并代码时出现冲突是很常见的,不过如何解冲突才能更加可靠呢?不漏掉别人的修改,也同时让自己的修改完全保留。本文将介绍利用各种工具更可靠地解决冲突。本文内容使用 Visual Studio使用 Visual Studio如果你使用 Visual Studio,那么当合并两个分支出现冲突的时候,Visual Studio 的 Team Explorer 会显示当前冲突的所有文件...原创 2020-03-31 07:54:14 · 299 阅读 · 0 评论 -
在 Visual Studio 中使用 EditorConfig 统一代码风格(含原生与插件)
EditorConfig 是一种被各种编辑器广泛支持的配置,使用此配置有助于项目在整个团队中保持一致的代码风格。Visual Studio 2017 开始原生支持 EditorConfig。本文将介绍 Visual Studio 对 EditorConfig 的支持情况(含原生与插件),并给出符合 .NET 和 C# 约定的 EditorConfig 详细设置。本文内容EditorConfi...原创 2020-03-31 07:46:39 · 2962 阅读 · 0 评论 -
csproj 文件中那个空的 NuGetPackageImportStamp 是干什么的?
当我们在传统格式的 csproj 项目文件中安装 NuGet 包后,有时会在项目文件中发现空的 NuGetPackageImportStamp 节点。这个空的节点让我们这波强迫症患者觉得有点难以接受,关键是手工删除之后也没发现有什么副作用。那么为什么会出现这个节点?它究竟有什么作用?本文内容空的 NuGetPackageImportStamp 节点什么情况下会出现 NuGetPackageI...原创 2020-03-31 07:41:30 · 411 阅读 · 0 评论 -
使用 PInvoke.net Visual Studio Extension 辅助编写 Win32 函数签名
在 .NET 程序中使用 Win32 函数并不如 C++ 中方便。因为 C# 中不能引入 C++ 中常用的头文件,于是各种方法签名、结构体定义等等都需要各种寻找。然而 PInvoke.net 帮助我们解决了这个问题。本文推荐一款 Visual Studio 插件来帮助我们更快速地插入 Win32 函数签名。本文内容PInvoke.net使用 PInvoke.net 扩展PInvoke.net...原创 2020-02-29 13:41:53 · 979 阅读 · 1 评论 -
阻止某个 NuGet 包意外升级
出于兼容性考虑,我们可能不再更新某个项目的 NuGet 包。典型的情况是软件版本进行了大规模的不兼容的升级,需要对旧格式的数据进行读取,以便迁移到新格式的数据。然而,团队开发的软件可能因为某个小伙伴不知道这样的历史问题,从而手抖将某个不应该更新的 NuGet 包更新了,于是迁移就挂了。本文提供了一种方法来避免某些特定 NuGet 包的升级。如果你只关心结果,请直接前往最后一节:终极解决方案...原创 2020-01-28 17:40:49 · 419 阅读 · 0 评论 -
Sdk 风格的 csproj 对 WPF/UWP 支持不太好?有第三方 SDK 可以用!MSBuild.Sdk.Extras
自从微软推出 .NET Core 以来,新的项目文件格式以其优秀的可扩展性正吸引着更多项目采用。然而——微软官方的 WPF/UWP 项目模板依然还在采用旧的 csproj 格式!这只是因为——在 .NET Core 3.0 以前,基于 Microsoft.NET.Sdk 的官方 SDK 依然对 WPF/UWP 支持不够友好。本文内容为什么要使用第三方的 SDK?如何使用 MSBuild.Sd...原创 2020-01-28 17:21:13 · 885 阅读 · 0 评论 -
如何编写基于 Microsoft.NET.Sdk 的跨平台的 MSBuild Target(附各种自带的 Task)
我之前写过一篇 理解 C# 项目 csproj 文件格式的本质和编译流程,其中,Target 节点就是负责编译流程的最关键的节点。但因为篇幅限制,那篇文章不便详说。于是,我在本文说说 Target 节点。本文内容Target 的节点结构Target 执行的时机和先后顺序Microsoft.NET.Sdk 为我们提供的现成可用的 Task使用自己写的 Task差量编译Target 的节点结构...原创 2020-01-28 17:18:33 · 496 阅读 · 0 评论 -
通过设置启用 Visual Studio 默认关闭的大量强大的功能提升开发效率
使用 Visual Studio 开发 C#/.NET 应用程序,以前有 ReSharper 来不足其各项功能短板,后来不断将 ReSharper 的功能一点点搬过来稍微好了一些。不过直到 Visual Studio 2019,才开始渐渐可以和 ReSharper 拼一下了。如果你使用 Visual Studio 2019,那么像本文这样配置一下,可以大大提升你的开发效率。本文内容工具选项文...原创 2019-10-28 09:31:22 · 1821 阅读 · 0 评论 -
提高使用 Visual Studio 开发效率的键盘快捷键
Visual Studio 的功能可谓真是丰富,再配合各种各样神奇强大的插件,Visual Studio 作为太阳系最强大的 IDE 名副其实。如果你能充分利用起 Visual Studio 启用这些功能的快捷键,那么效率也会很高。本文内容建议记住万能重构转到所有重构重命名其他IntelliSense 自动完成列表智能感知参数信息编写代码格式化其他导航书签显示建议记住功能快捷键...原创 2019-10-28 09:30:16 · 623 阅读 · 0 评论 -
通过 mklink 收集本地文件系统的所有 NuGet 包输出目录来快速调试公共组件代码
我们做的公共库可能通过 nuget.org 发布,也可能是自己搭建 NuGet 服务器。但是,如果某个包正在开发中,需要快速验证其是否解决掉一些诡异的 bug 的话,除了单元测试这种间接的测试方法,还可以在本地安装未发布的 NuGet 包的方法来快速调试。本文介绍如何本地打包发布 NuGet 包,然后通过 mklink 收集所有的本地包达到快速调试的目的。本文内容将本地文件夹作为 NuGet...原创 2019-10-19 09:02:20 · 317 阅读 · 0 评论 -
MSBuild 在编写编译任务的时候判断当前是否在 Visual Studio 中编译
我们这里说的编译任务是 MSBuild 的 Target。虽然只有少部分,但确实有一些情况需要判断是否在 Visual Studio 中编译的时候才需要执行的编译任务,典型的如某些仅为设计器准备的代码。本文需要理解的前置知识是:解读 Microsoft.NET.Sdk 的源码,你能定制各种奇怪而富有创意的编译过程 - walterlv而使用 Visual Studio 编译的时候,会自...原创 2019-07-27 20:43:21 · 577 阅读 · 0 评论 -
C# 中新增类型的命名空间只需部分与其他命名空间名称相同即可破坏源码兼容性
我只是增加库的一个 API,比如增加几个类而已,应该不会造成兼容性问题吧。对于编译好的二进制文件来说,不会造成兼容性问题;但——可能造成源码不兼容。本文介绍可能的源码不兼容问题。本文使用多种语言编写,你可以选择你喜欢的语言阅读:C# 中新增类型的命名空间只需部分与其他命名空间名称相同即可破坏源码兼容性 - walterlvThe partial same C# namespace ma...原创 2019-07-27 20:40:47 · 306 阅读 · 0 评论 -
在 Visual Studio 中重新将高级保存功能放出来,便于强制指定文件编码格式
Visual Studio 的早期版本中有一个高级保存功能,但是升级到 Visual Studio 2019 之后这个功能就不在菜单项里面了。本文将带你把它找出来继续使用。本文内容第一步:工具 -> 自定义第二步:自定义命令第一步:工具 -> 自定义打开 Visual Studio 2019,然后进入“工具 -> 自定义”菜单项。对于英文版本,是“Tools ->...原创 2019-07-27 20:31:42 · 745 阅读 · 1 评论 -
在编译期间使用 Roslyn/MSBuild 自带的方法/函数判断、计算和修改属性
充分利用 MSBuild 自带的方法,可以在编译期间完成大多数常见的属性转换,而不再需要自己专门写库来完成。本文介绍如何使用 MSBuild 自带的方法,并列举 MSBuild 中各种自带的方法。本文内容如何在编译期间使用 MSBuild 自带的方法MSBuild 自带的方法数学运算EnsureTrailingSlashGetDirectoryNameOfFileAbove & Ge...原创 2019-07-27 20:10:26 · 656 阅读 · 0 评论 -
Roslyn/MSBuild 在编译期间从当前文件开始查找父级文件夹,直到找到包含特定文件的文件夹
大家在进行各种开发的时候,往往都不是写一个单纯项目就完了的,通常都会有一个解决方案,里面包含了多个项目甚至是大量的项目。我们经常会考虑输出一些文件或者处理一些文件,例如主项目的输出目录一般会选在仓库的根目录,文档文件夹一般会选在仓库的根目录。然而,我们希望输出到这些目录或者读取这些目录的项目往往在很深的代码文件夹中。如果直接通过 ..\..\.. 来返回仓库根目录非常不安全,你会数不过来的。...原创 2019-07-27 20:09:12 · 603 阅读 · 0 评论 -
Roslyn/MSBuild 在编译期间处理路径中的斜杠与反斜杠
本文介绍如何在项目文件 csproj,或者 MSBuild 的其他文件(props、targets)中处理路径中的斜杠与反斜杠。本文内容路径中的斜杠与反斜杠判断路径末尾是否有斜杠或反斜杠确保路径末尾有斜杠或反斜杠确保路径末尾没有斜杠或反斜杠路径中的斜杠与反斜杠我们都知道文件路径的层级之间使用斜杠(/)或者反斜杠(\)来分隔,具体使用哪一个取决于操作系统。本文不打算对具体使用哪一种特别说明,...原创 2019-06-29 10:03:42 · 826 阅读 · 0 评论 -
在 Roslyn/MSBuild 中进行基本的数学运算
在任何一种编程语言中,做基本的数学运算都是非常容易的事情。不过,不知道 .NET 项目的项目文件 csproj 文件中进行数学运算就不像一般的编程语言那样直观了,毕竟这不是一门语言,而只是一种项目文件格式而已。本文介绍如何在 Roslyn/MSBuild 的项目文件中使用基本的数学运算。本文内容Roslyn/MSBuild 中的数学运算加减乘除模不要试图在 MSBuild 中使用传统的数学运...原创 2019-06-29 10:02:46 · 333 阅读 · 0 评论 -
如何修改 Visual Studio 新建项目时的默认路径
Visual Studio 创建新项目的时候,默认位置在 C:\Users\lvyi\source\repos\ 下。多数时候,我们都希望将其改为一个更适合自己开发习惯的路径。实际上修改默认路径并不是一个麻烦的事情,但是当紧急需要修改的时候,你可能找不到设置项在哪里。本文介绍如何修改这个默认路径。默认位置默认位置在 C:\Users\lvyi\source\repos\ 下。Visu...原创 2019-06-29 09:52:26 · 23494 阅读 · 5 评论 -
Visual Studio 通过修改项目的调试配置文件做到临时调试的时候不要编译(解决大项目编译缓慢问题)
.NET 托管程序的编译速度比非托管程序要快非常多,即便是 .NET Core,只要不编译成 Native 程序,编译速度也是很快的。然而总是有一些逗比大项目编译速度非常缓慢(我指的是分钟级别的),而且还没做好差量编译;于是每一次编译都需要等待几十秒到数分钟。这显然是非常影响效率的。在解决完项目的编译速度问题之前,如何能够临时进行快速调试改错呢?本文将介绍在 Visual Studio 中不进行...原创 2019-06-29 09:47:40 · 1209 阅读 · 0 评论 -
MSBuild 中的特殊字符($ @ % 等):含义、用法以及转义
在 MSBuild 中有一些特殊字符,如 $ @ % ' 等,本文介绍他们的含义,如何使用他们,以及你真的需要这些字符的时候如何编写他们。本文内容特殊字符含义和用法`$``@``%``'``;``?` 和 `*`转义特殊字符MSBuild 中有这些特殊字符:$@%';?*含义和用法$引用一个属性或者环境变量。<Project> <ItemGr...原创 2019-06-29 09:45:41 · 1662 阅读 · 0 评论 -
在项目文件 csproj 中或者 MSBuild 的 Target 中使用 % 引用集合中每一项的属性
在编写项目文件或者 MSBuild Target 文件的时候,我们经常会使用 <Foo Include="Identity" /> 来定义集合中的一项。在定义的同时,我们也会额外指定一些属性。然而这些属性如何拿到并且使用呢?本文将介绍使用方法。将下面的代码放到你项目文件的末尾,最后一个 </Project> 的前面,可以在编译的时候看到两个新的警告。<Targ...原创 2019-06-29 09:41:43 · 822 阅读 · 0 评论 -
C# 可空引用类型 NullableReferenceTypes 更强制的约束:将警告改为错误 WarningsAsErrors
程序员不看警告!于是 C# 8.0 带来的可空引用类型由于默认以警告的形式出现,所以实际上约束力非常弱。本文将把 C# 8.0 的可空引用类型警告提升为错误,以提高约束力。本文内容启用可空引用类型项目属性WarningsAsErrors启用可空引用类型你需要先在你的项目中启用可空引用类型的支持,才能修改警告到错误:C# 8.0 如何在项目中开启可空引用类型的支持 - 吕毅项目属...原创 2019-05-28 14:17:21 · 899 阅读 · 0 评论 -
C# 8.0 可空引用类型中的各项警告/错误的含义和示例代码
C# 8.0 引入了可为空引用类型和不可为空引用类型。当你需要给你或者团队更严格的要求时,可能需要定义这部分的警告和错误级别。本文将介绍 C# 可空引用类型部分的警告和错误提示,便于进行个人项目或者团队项目的配置。本文内容开启可空引用类型以及配置警告和错误警告和错误`CS8600``CS8602``CS8603``CS8618``CS8625`开启可空引用类型以及配置警告和错误本文的内容...原创 2019-05-28 14:15:54 · 4570 阅读 · 0 评论 -
C# 8.0 如何在项目中开启可空引用类型的支持
C# 8.0 引入了可为空引用类型和不可为空引用类型。由于这是语法级别的支持,所以比传统的契约式编程具有更强的约束力。更容易帮助我们消灭 null 异常。本文将介绍如何在项目中开启 C# 8.0 的可空引用类型的支持。本文内容使用 Sdk 风格的项目文件在项目文件中开启可空引用类型的支持可为空注释(Annotation)上下文可为空警告上下文在源代码文件中开启可空引用类型的支持早期版本的属性...原创 2019-05-28 14:14:32 · 2136 阅读 · 0 评论 -
如何快速自定义 Visual Studio 中部分功能的快捷键
Visual Studio 中有些自带的快捷键与现有软件有冲突,那么如何修改这些快捷键让这些功能正常工作起来呢?本文内容打开快捷键设置界面修改一个现有功能的快捷键打开快捷键设置界面在 Visual Studio 中打开 “工具 -> 选项”,打开选项设置界面。在其中找到 “环境 -> 键盘” 项。我们设置快捷键的地方就在这里。修改一个现有功能的快捷键默认情况下,在 Vi...原创 2019-05-26 14:39:40 · 1526 阅读 · 0 评论 -
手工编辑 tasks.json 和 launch.json,让你的 VSCode 具备调试 .NET Core 程序的能力
如果 C# for Visual Studio Code 没有办法自动为你生成正确的 tasks.json 和 launch.json 文件,那么可以考虑阅读本文手工创建他们。本文内容前期准备半自动创建 tasks.json 和 launch.json全手工创建 tasks.json 和 launch.json前期准备你需要安装 .NET Core Sdk、Visual Studio Co...原创 2019-04-28 09:26:42 · 7885 阅读 · 0 评论 -
如何快速创建 Visual Studio 代码片段?
使用 Visual Studio 的代码片段功能,我们可以快速根据已有模板创建出大量常用的代码出来。ReSharper 已经自带了一份非常好用的代码片段工具,不过使用 ReSharper 创建出来的代码片段只能用在 ReSharper 插件中。如果团队当中有一些小伙伴没有 ReSharper(毕竟很贵),那么也可以使用到 Visual Studio 原生的代码片段。Visual Studio 的...原创 2019-08-30 14:50:22 · 2155 阅读 · 0 评论 -
如果不用 ReSharper,那么 Visual Studio 2019 能还原 ReSharper 多少功能呢?
本文只谈论 ReSharper 的那些常用功能中,Visual Studio 2019 能还原多少,主要提供给那些正在考虑不使用 ReSharper 插件的 Visual Studio 用户作为参考。毕竟 ReSharper 如此强大的功能是建立在每年缴纳不少的费用以及噩梦般占用 Visual Studio 性能的基础之上的。然而使用 Visual Studio 2019 社区版不搭配 ReSha...原创 2019-08-30 14:54:42 · 7366 阅读 · 1 评论 -
推荐几款连字字体,在代码编辑器中启用连字字体(Visual Studio Code)
启用转为编程设计的连字字体,可以给你的变成带来不一样的体验。本文内容连字字体连字字体推荐在编辑器中启用在 Visual Studio Code 中启用在 Visual Studio 或其他 Windows 系统自带软件中启用连字字体下面是 Fira Code 连字字体在 Visual Studio Code 中的显示效果:就是下面这一段代码:x =>{ if (x &...原创 2019-09-27 09:40:13 · 19827 阅读 · 1 评论 -
Visual Studio 2019 中使用 .NET Core 预览版 SDK 的全局配置文件在哪里?
本文介绍在使用 Visual Studio 2019 或者命令行执行 MSBuild dotnet build 命令时,决定是否使用 .NET Core SDK 预览版的全局配置文件。指定是否使用 .NET Core 预览版 SDK 的全局配置文件在:%LocalAppData%\Microsoft\VisualStudio\16.0_xxxxxxxx\sdk.txt其中 %Local...原创 2019-09-27 09:36:25 · 1286 阅读 · 0 评论 -
使用基于 Roslyn 的 Microsoft.CodeAnalysis.PublicApiAnalyzers 来追踪项目的 API 改动,帮助保持库的 API 兼容性
做库的时候,需要一定程度上保持 API 的兼容性本文内容第一步:安装 NuGet 包第二步:创建 API 记录文件第三步:添加 API 记录体验 API 的追踪将警告变成错误第四步:将 API 打包第一步:安装 NuGet 包首先打开你的库项目,或者如果你希望从零开始也可以直接新建一个项目。这里为了博客阅读的简单,我创建一个全新的项目来演示。然后,为主要的库项目安装 NuGet 包:...原创 2019-09-27 09:35:25 · 808 阅读 · 0 评论 -
如何在 Visual Studio 2019 中设置使用 .NET Core SDK 的预览版(全局生效)
.NET Core 3 相比于 .NET Core 2 是一个大更新。也正因为如此,即便它长时间处于预览版尚未发布的状态,大家也一直在使用。Visual Studio 2019 中提供了使用 .NET Core SDK 预览版的开关。但几个更新的版本其开关的位置不同,本文将介绍在各个版本中的位置,方便你找到然后设置。本文内容Visual Studio 2019 (16.3 及以上)Visua...原创 2019-09-27 09:33:13 · 6002 阅读 · 0 评论 -
找出 .NET Core SDK 是否使用预览版的全局配置文件在哪里(探索篇)
你是否好奇 Visual Studio 2019 中的 .NET Core SDK 预览版开关是全局生效的,那个全局的配置在哪里呢?本文将和你一起探索找到这个全局的配置文件。本文内容使用 Process Monitor 探索下载 Process Monitor打开 Process Monitor设置过滤规则捕获 devenv.exe捕获 MSBuild.exe验证结论其他反编译探索使用 P...原创 2019-09-27 09:31:55 · 569 阅读 · 0 评论 -
nuget.exe 还原解决方案 NuGet 包的时候出现错误:调用的目标发生了异常。Error parsing the nested project section in solution file
我这里使用 Visual Studio 2019 能好好编译的一个项目,发现在另一个小伙伴那里却编译不通过,是在 NuGet 还原那里报告了错误:调用的目标发生了异常。Error parsing the nested project section in solution file.本文介绍如何解决这样的问题。原因此问题的原因可能有多种:解决方案里面 Project 和 EndP...原创 2019-09-27 09:29:18 · 1310 阅读 · 0 评论 -
两种方法设置 .NET/C# 项目的编译顺序,而不影响项目之间的引用
当 A 项目引用 B 项目,那么使用 Visual Studio 或者 MSBuild 编译 A 项目之前就会确保 B 项目已经编译完毕。通常我们指定这种引用是因为 A 项目确实在运行期间需要 B 项目生成的程序集。但是,现在 B 项目可能仅仅只是一个工具项目,或者说 A 项目编译之后的程序集并不需要 B,仅仅只是将 B 打到一个包中,那么我们其实需要的仅仅是 B 项目先编译而已。本文介绍如何...原创 2019-09-27 09:27:27 · 3305 阅读 · 0 评论 -
解决方案文件 sln 中的项目类型 GUID
Visual Studio 可以通过得知项目类型快速地为项目显示相应的图标、对应的功能等等。本文整理已收集到的一些项目的 GUID,如果你把你的解决方案文件(sln)改坏了,那么可以修复一下。8BB2217D-0F2D-49D1-97BC-3654ED321F3B ASP.NET 5603C0E0B-DB56-11DC-BE95-000D561079B0 ASP.NET MVC 1F8...原创 2019-09-27 09:26:23 · 1267 阅读 · 0 评论 -
为 NuGet 指定检测的 MSBuild 路径或版本,解决 MSBuild auto-detection: using msbuild version 自动查找路径不合适的问题
使用 nuget restore 命令还原项目的 NuGet 包的时候,NuGet 会尝试自动检测计算机上已经安装的 MSBuild。不过,如果你同时安装了 Visual Studio 2017 和 Visual Studio 2019,那么 NuGet 有可能找到错误版本的 MSBuild。本文介绍如何解决自动查找版本错误的问题。本文内容问题使用命令行参数解决修改环境变量解决问题当我们...原创 2019-09-27 09:25:37 · 1965 阅读 · 0 评论 -
如何安装和准备 Visual Studio 扩展/插件开发环境
因为很多涉及到 Visual Studio 插件开发相关的文章/博客需要以安装 Visual Studio 插件开发环境为基础,所以本文介绍如何安装 Visual Studio 插件开发环境,以简化那些博客中的内容。启动 Visual Studio 安装程序请在开始菜单中找到或者搜索 Visual Studio Installer,然后启动它:安装 Visual Studio 插件开发工...原创 2019-09-27 08:15:02 · 4597 阅读 · 0 评论 -
理解 Visual Studio 解决方案文件格式(.sln)
一般情况下我们并不需要关心 Visual Studio 解决方案文件格式(.sln),因为 Visual Studio 对解决方案文件的自动修复能力是非常强的。但是如果遇到自动解冲突错误或者编译不通过了,那么此文件还是需要手工修改的。本文介绍 Visual Studio 解决方案(.sln)文件的格式。本文内容基本概念结构版本信息项目信息ProjectProjectSection全局信息基...原创 2019-09-27 09:28:17 · 9475 阅读 · 0 评论