如何使用命令行 MSDeploy ASP.NET Core 应用程序?(使用 csproj 而不是 project.json)

3

ASP.NET Core应用程序能否通过msdeploy.exe和类似于 .NET Core之前可行的.pubxml定义进行部署?以下是我之前使用的命令:

msbuild myproj.csproj /p:DeployOnBuild=true /p:PublishProfile=<profile-name>

如果不行,从命令行部署ASP.NET Core应用程序的首选方法是什么?


我有完全相反的问题。我经常无法使用VS进行发布,但是可以使用VS开发命令提示符来使用MSBuild/DeployOnBuild进行发布(这个方法非常有效)。 - R. Richards
MSDeploy仅适用于IIS,这不再符合使用.NET Core进行跨平台的目标。所以我猜这就是为什么微软默认情况下不提供您想要的功能。您可以尝试使用dotnet publish吗?https://learn.microsoft.com/en-us/aspnet/core/publishing/web-publishing-vs - Lex Li
实际上,许多发布配置文件功能都是由Web SDK实现的,因此大多数发布配置文件应该可以正常工作。VS UI也会调用它们。您遇到了什么确切的错误?您能分享一下发布配置文件吗? - Martin Ullrich
@MartinUllrich,我收到了一长串错误提示,指出基本上找不到每个 .net 命名空间,例如 The type or namespace name 'System' could not be found in the global namespace (are you missing an assembly reference?)。我已经在上面更新了我的答案,其中包含我正在运行的确切命令。 - JTW
在发布过程中,您是否运行 dotnet restore 命令? - Martin Ullrich
是的,在执行 dotnet build 命令之前,我会先执行 dotnet restore - JTW
3个回答

4

您可以在此处找到有关命令行用法的文档: https://github.com/aspnet/websdk/blob/dev/README.md#microsoftnetsdkpublish

您可以使用以下任何命令从命令行发布使用 MSDeploy:

msbuild WebApplication.csproj /p:DeployOnBuild=true /p:PublishProfile=<MsDeployProfileName> /p:Password=<DeploymentPassword>

或者
dotnet publish WebApplication.csproj /p:PublishProfile=<MsDeployProfileName> /p:Password=<DeploymentPassword>

您可以在这里找到各种配置文件的示例 - https://github.com/vijayrkn/PublishProfiles/tree/master/samples

要修复错误,请确保在运行发布命令之前先运行还原命令:

dotnet restore 

不幸的是,它只创建本地 bin 文件夹,即使在发布配置文件中定义了目标,也不会发送任何内容... - Andrzej Martyna
对我有用,我从Visual Studio创建了一个Web部署配置文件,并在命令行中使用它发布到远程IIS,谢谢。 - ahmedsafan86

4
要将您的asp.net core应用程序部署到Azure Web App,只需要按照以下步骤进行操作:
1. dotnet publishsomeproject.csproj -c release -o someDirectory
2. msdeploy.exe  -verb:sync -source:contentPath="someDirectory" -dest:contentPath="webAppName",ComputerName="https://WebAppName.scm.azurewebsites.net/msdeploy.axd",UserName="username",Password="password",IncludeAcls="False",AuthType="Basic"
-enablerule:AppOffline -enableRule:DoNotDeleteRule -retryAttempts:20 -verbose

在Azure门户中的Web应用程序的部署预览部分可以检索或设置用户名和密码。我已经为我的msdeploy.exe设置了一个环境路径,通常可以在此处找到:C:\Program Files\IIS\Microsoft Web Deploy V3


0

使用dotnet cli工具的一种方法是使用dotnet publish命令。

dotnet restore
dotnet publish -c Release -o output

这将恢复所有NuGet依赖项,然后在一个名为output的文件夹中创建一个发布版本构建。您可以使用“xcopy deploy”命令将其部署,添加到Dockerfile中,或者进行其他任何您需要的操作。

请注意,这适用于使用较新版本的dotnet cli工具(不再支持project.json文件)的基于csproj的项目。


谢谢您的建议。我特别希望使用msdeploy;我知道我可以使用dotnet publish来为部署准备应用程序,但这不是我想要的。 - JTW
抱歉,我明白了。看起来https://dev59.com/zZjga4cB1Zd3GeqPFRlr似乎有一些有希望的信息。你可能需要运行上面的“dotnet”命令,并将其输出用于“msdeploy”。 - dbattaglia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接