我想使用 msbuild 通过命令提示符发布我的 ASP.NET MVC 项目。
当我使用
publishProfile
时,它工作正常并在所需位置生成发布文件夹;但是当我使用命令而不是 publishProfile
时,它不会生成发布文件夹。
这是发布配置文件:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>FileSystem</WebPublishMethod>
<PublishProvider>FileSystem</PublishProvider>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<publishUrl>D:\Published</publishUrl>
<DeleteExistingFiles>True</DeleteExistingFiles>
</PropertyGroup>
</Project>
当我使用此命令时,它工作正常并在
D:\Published
处生成输出(如 PublishProfile 中所述)
msbuild "D:\secureamr_ss_premier_500_branch\source\WebSite\SecureAMRWeb.sln" /p:DeployOnBuild=true /p:PublishProfile="D:\secureamr_ss_premier_500_branch\source\WebSite\SecureAMRWeb\Properties\PublishProfiles\FolderProfile.pubxml"
但是当我使用此命令时(在此命令中,我删除了
publishProfile
,而是在 msbuild
命令中包含了publishProfiles 的所有属性),它没有在 D:\Published
处生成任何结果(如命令中指定的)
msbuild "D:\secureamr_ss_premier_500_branch\source\WebSite\SecureAMRWeb.sln" /p:DeployOnBuild=true
/p:WebPublishMethod=FileSystem
/p:PublishProvider=FileSystem
/p:publishUrl="D:\Published"
/p:LastUsedBuildConfiguration=Release
/p:LastUsedPlatform="Any CPU"
/p:LaunchSiteAfterPublish=True
/p:ExcludeApp_Data=False
/p:DeleteExistingFiles=True
我能够重现您的问题。
首先,根据[本文档](https://learn.microsoft.com/en-us/visualstudio/deployment/building-clickonce-applications-from-the-command-line?view=vs-2022#publish -process- 输出),PublishUrl 作为命令属性不能在 VS 2022 17.4 之前的命令中使用。
另外,虽然您提供的信息并不完全清楚,但我认为您正在使用 .net 框架 Web 应用程序,对吗?事实上,这个问题不仅出现在Web应用程序中,也出现在基于.net框架的项目中。 .net框架是一个非常古老的框架。如果要使用 PublishUrl 等属性,则需要将其基于 pubxml 等文件,否则传入的命令部分将无法识别。
对于 .net 框架,此命令将起作用:
msbuild /p:Configuration=发布 /p:DeployOnBuild=true /p:PublishProfile=xxx\FolderProfile.pubxml
但是这样的命令不起作用,该属性将无法被识别:
msbuild /p:Configuration=Release /p:DeployOnBuild=true /p:PublishUrl='C:\Published'
如果你尝试一下,你会发现.net core应用程序可以使用第二个命令