.NET 4.7.2 ASMX WebService推送至GitHub时出现MSB4019及MSB3644错误的解决咨询
看起来你遇到的是GitHub CI环境和本地Windows VS环境不匹配导致的问题,毕竟ASMX这类传统.NET Framework Web项目对MSBuild环境的依赖比较特殊,我来给你梳理几个可行的解决办法:
切换CI环境到Windows镜像
你报错里提到的Microsoft.WebApplication.targets是Windows平台下Visual Studio专属的MSBuild目标文件,Linux环境的.NET SDK是不带这个的。所以如果用GitHub Actions的话,一定要把工作流的运行环境设置为Windows,比如在你的GitHub Actions配置文件(.github/workflows/xxx.yml)里加上:jobs: build: runs-on: windows-latestWindows镜像默认包含了Visual Studio相关的MSBuild组件,
$(MSBuildExtensionsPath32)指向的路径下会有对应的targets文件,VS自动添加的那行Import就能正常生效了。确保CI环境安装了.NET Framework 4.7.2开发包
第二个错误提示缺少.NET 4.7.2的引用程序集,虽然Windows镜像通常预装了常用的.NET Framework开发包,但如果没装的话,可以在CI步骤里手动安装。比如用Chocolatey包管理器添加安装步骤:choco install dotnetfx-4.7.2-devpack -y或者也可以通过Visual Studio Installer安装“ASP.NET和Web开发”工作负载,这个工作负载包含了Web项目所需的所有目标文件和依赖。
保留VS自动添加的Import行
你之前尝试删除那行Import导致了新的错误,这是因为ASMX Web项目需要依赖这个targets文件来处理Web应用的编译逻辑,强行移除会破坏项目的MSBuild配置。只要CI环境是Windows且有对应的VS组件,这个Import路径是完全有效的,不用手动修改。本地提前模拟CI编译
为了避免推送到GitHub才发现问题,你可以在本地用MSBuild命令行来模拟CI的编译过程:打开VS2022的开发者命令提示符,运行:msbuild YourWebServiceProject.csproj /t:Build /p:Configuration=Release如果本地能正常编译,说明项目本身没问题,问题就集中在CI环境的配置上。
备注:内容来源于stack exchange,提问作者James

