dotnet publish指定PublishProfile不生效,寻求技术排查指引
我之前在ASP.NET Core 2.x版本里也碰到过一模一样的问题——参数看似被完全忽略,连输错配置名都不报错,其实都是几个容易踩的小坑,咱们一步步来排查:
检查PublishProfile文件的存放位置和命名
首先要确认你的.pubxml文件是不是放在项目根目录下的Properties/PublishProfiles文件夹里——这个路径是固定的,dotnet只会从这里读取发布配置文件。另外文件名要和命令里的参数完全匹配(比如你用MyFolderProfile,文件就得是MyFolderProfile.pubxml,虽然Windows大小写不敏感,但跨平台环境下一定要注意)。确保命令在正确的目录执行
你必须在项目文件(.csproj)所在的目录下运行dotnet publish命令。如果是在解决方案根目录执行,得加上项目的相对路径,比如:dotnet publish ./MyWebApp/MyWebApp.csproj /p:PublishProfile="MyFolderProfile"补充2.x版本必需的额外参数
ASP.NET Core 2.x版本里,单独用/p:PublishProfile有时候不会触发发布配置的逻辑,必须加上/p:DeployOnBuild=true参数才能让配置生效。试试完整的命令:dotnet publish /p:PublishProfile="MyFolderProfile" /p:DeployOnBuild=true要是你想强制指定输出目录,还可以加上
/o参数验证,比如/o ./my-publish-folder,这样能直观看到是否用了自定义配置。检查pubxml文件的内容有效性
打开你的MyFolderProfile.pubxml,确保配置内容没有语法错误,至少包含基础的发布节点。举个FileSystem发布的示例:<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <PublishProtocol>FileSystem</PublishProtocol> <PublishDir>../output/MyCustomPublish</PublishDir> <TargetFramework>netcoreapp2.1</TargetFramework> <!-- 如果需要指定运行时,加上下面这行 --> <RuntimeIdentifier>win-x64</RuntimeIdentifier> </PropertyGroup> </Project>如果配置文件本身有问题,dotnet会静默 fallback 到默认行为,不会给出错误提示。
清理项目缓存后重试
有时候项目的obj、bin目录缓存会导致配置不生效,先执行清理命令再发布:dotnet clean dotnet publish /p:PublishProfile="MyFolderProfile" /p:DeployOnBuild=true
按照上面的步骤排查,应该就能解决参数被忽略的问题了。
内容的提问来源于stack exchange,提问作者Sam

