当前位置: 首页 > news >正文

.NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?

在扩展 MSBuild 编译的时候,我们一般的处理的路径都是临时路径或者输出路径,那么发布路径在哪里呢?


我曾经在下面这一篇博客中说到可以通过阅读 Microsoft.NET.Sdk 的源码来探索我们想得知的扩展编译的答案:

  • 解读 Microsoft.NET.Sdk 的源码,你能定制各种奇怪而富有创意的编译过程 - walterlv

于是,我们可以搜索 "Publish" 这样的关键字找到我们希望找到的编译目标,于是找到在 Microsoft.NET.Sdk.Publish.targets 文件中,有很多的 PublishDir 属性存在,这可以很大概率猜测这个就是发布路径。不过我只能在这个文件中找到这个路径的再次赋值,找不到初值。

如果全 Sdk 查找,可以找到更多赋初值和使用它复制和生成文件的地方。

PublishDir 全文查找

于是可以确认,这个就是最终的发布路径,只不过不同类型的项目,其发布路径都是不同的。

比如默认是:

<PublishDir Condition="'$(PublishDir)'==''">$(OutputPath)app.publish\</PublishDir>

还有:

<_DeploymentApplicationDir>$(PublishDir)$(_DeploymentApplicationFolderName)\</_DeploymentApplicationDir>

和其他。


我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • 如何给 Windows Terminal 增加一个新的终端(以 Bash 为例)
  • 在 Visual Studio 中设置当发生某个特定异常或所有异常时中断
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • 如何在 Windows 10 中安装 WSL2 的 Linux 子系统
  • 如何安装和准备 Visual Studio 扩展/插件开发环境
  • 基于 Roslyn 同时为 Visual Studio 插件和 NuGet 包开发 .NET/C# 源代码分析器 Analyzer 和修改器 CodeFixProvider
  • 软件界面中一些易混淆/易用错的界面文案,以及一些约定俗成的文案约定
  • WPF 的 VisualBrush 只刷新显示的视觉效果,不刷新布局范围
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • 使用 Roslyn 分析代码注释,给 TODO 类型的注释添加负责人、截止日期和 issue 链接跟踪
  • 为 NuGet 指定检测的 MSBuild 路径或版本,解决 MSBuild auto-detection: using msbuild version 自动查找路径不合适的问题
  • 解决方案文件 sln 中的项目类型 GUID
  • 两种方法设置 .NET/C# 项目的编译顺序,而不影响项目之间的引用
  • 理解 Visual Studio 解决方案文件格式(.sln)
  • nuget.exe 还原解决方案 NuGet 包的时候出现错误:调用的目标发生了异常。Error parsing the nested project section in solution file
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • bootstrap创建登录注册页面
  • Codepen 每日精选(2018-3-25)
  • gitlab-ci配置详解(一)
  • in typeof instanceof ===这些运算符有什么作用
  • JS基础之数据类型、对象、原型、原型链、继承
  • python3 使用 asyncio 代替线程
  • Ruby 2.x 源代码分析:扩展 概述
  • supervisor 永不挂掉的进程 安装以及使用
  • 搭建gitbook 和 访问权限认证
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 实现菜单下拉伸展折叠效果demo
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 阿里云ACE认证之理解CDN技术
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​比特币大跌的 2 个原因
  • #大学#套接字
  • (Note)C++中的继承方式
  • (vue)页面文件上传获取:action地址
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET 4.0中的泛型协变和反变
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .Net Remoting常用部署结构
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET 中的轻量级线程安全
  • .NET大文件上传知识整理
  • .NET值类型变量“活”在哪?
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [] 与 [[]], -gt 与 > 的比较
  • [20171102]视图v$session中process字段含义
  • [22]. 括号生成
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [Asp.net mvc]国际化