.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

