gpt4 book ai didi

azure - 可以从命令行打包 Windows Azure 云项目,但不能部署到 Windows Azure 本身

转载 作者:行者123 更新时间:2023-12-04 17:09:26 25 4
gpt4 key购买 nike

我们有一个解决方案,其中包含一个 Web 应用程序项目,该项目将作为 Windows Azure 云服务中的 Web 角色。它还承载了一个仅针对云服务的云服务项目(生产槽)

SlnRoot\WebApp1\WebApp1.csprojSlnRoot\CloudDeployment\CloudServiceName\CloudServiceName.ccproj

从 Visual Studio 发布(部署)非常简单;只需从云项目的上下文菜单中选择“发布...”选项,然后使用所有预配置的云服务设置单击“发布”。

现在,我们将进一步尝试自动化此过程,因此我将在不借助 Visual Studio 的情况下从命令行和原始 MSBuild 进行尝试。

.nuget\nuget.exe restore
msbuild .\CloudDeployment\CloudServiceName\CloudServiceName.ccproj /t:Publish /p:PublishDir=..\..\pubout\ /fl1 /v:d

但看起来“发布”目标实际上是 Visual Studio 中的“打包”选项,仅生成必须手动上传到 Windows Azure 门户的 cspkg 文件。当然,这是不行的。是否有一个单独的目标可以指定来执行 Visual Studio 如此轻松执行的附加步骤(不是部署;没有这样的目标)?

最佳答案

谢谢你的建议。然而,我的知识差距的真正答案——MSBuild 和 PowerShell 最初是如何结合在一起的——来 self 的同事,他制作了一个自定义的 MSBuild proj 文件以使它们一起工作。基本示例后面带有注释

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0"
DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<!-- Declare configuration properties for this deployment -->
<!-- This custom.proj file is in a sub-directory in solution root -->

<PropertyGroup>
<SolutionDir Condition=" '$(SolutionDir)'=='' ">$(MSBuildThisFileDirectory)..\</SolutionDir>
<SolutionPath Condition=" '$(SolutionPath)'=='' ">$(MSBuildThisFileDirectory)..\CloudService.sln</SolutionPath>
<OutDir Condition=" '$(OutDir)'=='' ">$(MSBuildThisFileDirectory)\Output\Binaries\</OutDir>
<PackageOutDir>$(MSBuildThisFileDirectory)Output\Packages\</PackageOutDir>
<TargetCloudService>targetcloudservice</TargetCloudService>
<DeployConfig>BuildConfig</DeployConfig>
<PubSettingsPath>$(MSBuildThisFileDirectory)subscription.publishsettings</PubSettingsPath>
<SubscriptionName>subscription name</SubscriptionName>
<StorageAccount>targetstorageaccount</StorageAccount>
</PropertyGroup>


<!-- Target to restore all Nuget packages on a clean repo pull. -->

<Target Name="RestorePackages">
<Message Text="Restoring nuget..."/>
<Exec Command="&quot;$(SolutionDir).nuget\NuGet.exe&quot; restore &quot;$(SolutionPath)&quot;" />
</Target>

<!--
Target to package the indicated cloud project,
which will build the referenced web role project first with desired build config.
-->

<Target Name="PackageCloud" DependsOnTargets="RestorePackages">
<Message Text="Creating package for cloud deployment ..."/>
<MSBuild
Projects="$(MSBuildThisFileDirectory)..\CloudDeployment\$(TargetCloudService)\$(TargetCloudService).ccproj"
Properties="OutputPath=$(PackageOutDir)$(TargetCloudService)\;Configuration=$(DeployConfig);"
Targets="Publish"/>
</Target>


<!--
Target to deploy the package produced by the dependency target.
This is the part that launches PowerShell to execute custom ps1 script
with all the cloud service parameters (MSBuild variables above)
and cspkg package for deployment.
The custom script uses the Azure module cmdlets to make service checks and publish.
-->

<Target Name="DeployCloud" DependsOnTargets="PackageCloud">
<Message Text="Deploying package to cloud service ..."/>
<Exec WorkingDirectory="$(MSBuildThisFileDirectory)"
Command="$(windir)\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -f $(MSBuildThisFileDirectory)PublishCloudService.ps1 -packageLocation &quot;$(PackageOutDir)$(TargetCloudService)\app.publish\$(TargetCloudService).cspkg&quot; -cloudConfigLocation &quot;$(PackageOutDir)$(TargetCloudService)\app.publish\ServiceConfiguration.Cloud.cscfg&quot; -subscriptionDataFile &quot;$(PubSettingsPath)&quot; -selectedsubscription &quot;$(SubscriptionName)&quot; -servicename $(TargetCloudService) -storageAccountName $(StorageAccount)" />
</Target>
</Project>

因此一次性部署调用类似于

msbuild.exe custom.proj /t:DeployCloud

关于azure - 可以从命令行打包 Windows Azure 云项目,但不能部署到 Windows Azure 本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26030055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com