如何避免Visual Studio将程序集输出到目标框架名称目录下?
netstandard2.0项目输出路径强制追加TFN目录问题解决方案
问题根因
- .NET SDK风格项目默认会在用户配置的输出路径后自动追加**目标框架名称(TFN)**层级目录,因此即便你在项目属性中指定了
.\bin\Debug作为输出路径,netstandard2.0项目的编译产物最终还是会生成到.\bin\Debug\netstandard2.0目录下 - 此前使用生成后事件移动产物、删除TFN目录的方案会破坏增量编译工具
FastUpToDate的校验逻辑:该工具会固定检查TFN目录下的pdb、dll等输出文件是否存在,文件丢失就会判定项目需要重新编译,最终导致无意义的全量编译
修复方案
直接修改netstandard2.0项目的.csproj配置文件,禁用自动追加TFN目录的默认逻辑即可,无需额外编写生成后事件:
- 右键对应项目,选择「编辑项目文件」
- 在文件首个
<PropertyGroup>节点下添加如下配置:
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
- 保存项目文件后重新生成一次即可生效
- 配置生效后,项目会直接将所有输出文件(dll、pdb、json等)生成到你预先配置的
.\bin\Debug目录下,不会再生成额外的netstandard2.0子目录 - 该配置完全兼容
FastUpToDate的增量编译校验逻辑,不会再出现项目已是最新版本仍重复编译的问题
注意事项
如果你的项目配置了多目标框架(同时兼容netstandard2.0、net6.0等多个框架),不建议禁用该配置,否则不同目标框架的输出文件会互相覆盖。该场景可以单独为每个目标框架指定独立输出路径避免冲突。
内容的提问来源于stack exchange,提问作者Patrick from NDepend team
相关产品推荐
相关产品推荐

