You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core MSBuild与dotnet msbuild执行结果不一致求助

解决dotnet msbuild执行自定义脚本无输出的问题

嘿,我来帮你理清这个问题——这不是Bug,而是dotnet msbuild和传统MSBuild工具在默认行为上的一个小差异导致的。

问题背后的原因

传统的msbuild.exe(也就是你在.NET Framework环境下用的那个),默认会自动执行脚本里第一个定义的Target,也就是你写的HelloWorld,所以能正常输出内容。

但dotnet msbuild是为.NET Core/SDK风格项目设计的,它默认会尝试执行.NET SDK项目的标准Target(比如Build)。而你的自定义脚本里根本没有这个Build Target,工具相当于"找不到要做的事",自然就没输出了——哪怕两个工具用的是同一个版本的MSBuild引擎,这点默认逻辑还是不一样的。

两种快速解决方法

方法1:执行命令时明确指定Target

直接在命令里加上-t:HelloWorld参数,告诉dotnet msbuild要运行哪个Target:

dotnet msbuild doSomething.msbuild -t:HelloWorld

运行这个命令,你就能看到熟悉的"Hello world"输出了。

方法2:修改MSBuild脚本,设置默认Target

在你的<Project>节点里添加DefaultTargets属性,指定默认要执行的Target:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="HelloWorld">
  <Target Name="HelloWorld">
    <Message Text="Hello world" />
  </Target>
</Project>

修改后,直接运行dotnet msbuild doSomething.msbuild,工具就会自动执行HelloWorld Target,输出内容和传统MSBuild完全一致。

验证一下

你可以任选一种方法试试,肯定能解决问题。这个差异其实是工具定位不同导致的:传统MSBuild更偏向通用自定义构建脚本,而dotnet msbuild则优先适配SDK项目的构建流程,所以默认行为有区别。

内容的提问来源于stack exchange,提问作者Mohammad Hossein Amri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 14:27:41