如何使用 Visual Studio Team Services 在单个服务上发布具有多个站点的 Azure 云服务项目?
How can I publish an Azure Cloud Services project with multiple sites on a single service using Visual Studio Team Services?
我有一个经典的云服务项目,在一个服务上有多个网站,在 ServiceDefinition.csdef
中配置如下:
<WebRole name="PE.Roles.API" vmsize="Small">
<Sites>
<Site name="API" physicalDirectory="..\..\..\PE.Roles.API">
<Bindings>
<Binding name="http" endpointName="PE.API" />
</Bindings>
</Site>
<Site name="PE.Services.Authorization" physicalDirectory="..\..\..\PE.Services.Authorization">
<Bindings>
<Binding name="http" endpointName="PE.Services.Authorization" />
</Bindings>
</Site>
<!-- Etc -->
</Sites>
</WebRole>
这会在 Visual Studio 2015 年正确编译和打包,并且可以毫无问题地从预编译的 .cspkg
文件部署到云服务。
我们最近转移到 Visual Studio DevOps 团队服务,我正在尝试使用提供的 Azure 云服务构建模板设置此解决方案以在云中构建和部署。
.sln
构建步骤正确完成,但 .ccproj
构建步骤失败并出现以下错误:
PE.Azure\bin\ServiceDefinition.csdef (0, 0)
PE.Azure\bin\ServiceDefinition.csdef(0,0): Error CloudServices079: Cannot find the physical directory 'D:\a\PE.Roles.API' for virtual path API/.
Process 'msbuild.exe' exited with code '1'.
我的构建参数是:/t:Publish /p:TargetProfile=$(targetProfile) /p:DebugType=None /p:SkipInvalidConfigurations=true /p:OutputPath=bin\ /p:PublishDir="$(build.artifactstagingdirectory)\"
我发现了很多涵盖类似问题的博客文章和 SO 问题,但没有一个能准确解决这个问题(过去几年也没有任何帖子)。
更新
我已经为该项目创建了一个 TFVC 存储库并实施了映射步骤,如下所示:
...但我仍然遇到同样的错误:
我需要做什么才能让它正常工作?
您需要根据 physicalDirectory 的设置修改源映射。
参考这个例子修改:
<Site name="API" physicalDirectory="..\..\..\WebGeneralDemo">
<Bindings>
<Binding name="http" endpointName="WebGeneralDemo" />
</Bindings>
</Site>
更新:
如果这些项目在 git 存储库中,您可以像这样在存储库中保留结构:
-回购
--AzureCloudServiceDemo
---AzureCloudServiceDemo
---WebRole1
--WebGeneralDemo
如果结构不是这样,您可以使用 Copy file task
复制文件夹(包括文件)
更新
在这个具体问题的情况下,Repo 的原始结构如下:
... 其中 .ccproj
文件在 PE.Azure
文件夹中,正在发布的站点在 PE.Roles.API
文件夹中。
编译器正在 $(build.sourcesDirectory)
上方的目录中查找站点内容(因此 D:\a\
),因此正确的复制文件任务到修复错误是:
每个站点都需要一个复制文件任务,并且任务必须位于构建解决方案 ***.sln 步骤之后,构建解决方案 ***.ccproj 步骤之前。
我有一个经典的云服务项目,在一个服务上有多个网站,在 ServiceDefinition.csdef
中配置如下:
<WebRole name="PE.Roles.API" vmsize="Small">
<Sites>
<Site name="API" physicalDirectory="..\..\..\PE.Roles.API">
<Bindings>
<Binding name="http" endpointName="PE.API" />
</Bindings>
</Site>
<Site name="PE.Services.Authorization" physicalDirectory="..\..\..\PE.Services.Authorization">
<Bindings>
<Binding name="http" endpointName="PE.Services.Authorization" />
</Bindings>
</Site>
<!-- Etc -->
</Sites>
</WebRole>
这会在 Visual Studio 2015 年正确编译和打包,并且可以毫无问题地从预编译的 .cspkg
文件部署到云服务。
我们最近转移到 Visual Studio DevOps 团队服务,我正在尝试使用提供的 Azure 云服务构建模板设置此解决方案以在云中构建和部署。
.sln
构建步骤正确完成,但 .ccproj
构建步骤失败并出现以下错误:
PE.Azure\bin\ServiceDefinition.csdef (0, 0)
PE.Azure\bin\ServiceDefinition.csdef(0,0): Error CloudServices079: Cannot find the physical directory 'D:\a\PE.Roles.API' for virtual path API/.
Process 'msbuild.exe' exited with code '1'.
我的构建参数是:/t:Publish /p:TargetProfile=$(targetProfile) /p:DebugType=None /p:SkipInvalidConfigurations=true /p:OutputPath=bin\ /p:PublishDir="$(build.artifactstagingdirectory)\"
我发现了很多涵盖类似问题的博客文章和 SO 问题,但没有一个能准确解决这个问题(过去几年也没有任何帖子)。
更新
我已经为该项目创建了一个 TFVC 存储库并实施了映射步骤,如下所示:
...但我仍然遇到同样的错误:
我需要做什么才能让它正常工作?
您需要根据 physicalDirectory 的设置修改源映射。
参考这个例子修改:
<Site name="API" physicalDirectory="..\..\..\WebGeneralDemo">
<Bindings>
<Binding name="http" endpointName="WebGeneralDemo" />
</Bindings>
</Site>
更新:
如果这些项目在 git 存储库中,您可以像这样在存储库中保留结构:
-回购
--AzureCloudServiceDemo
---AzureCloudServiceDemo
---WebRole1
--WebGeneralDemo
如果结构不是这样,您可以使用 Copy file task
复制文件夹(包括文件)更新
在这个具体问题的情况下,Repo 的原始结构如下:
... 其中 .ccproj
文件在 PE.Azure
文件夹中,正在发布的站点在 PE.Roles.API
文件夹中。
编译器正在 $(build.sourcesDirectory)
上方的目录中查找站点内容(因此 D:\a\
),因此正确的复制文件任务到修复错误是:
每个站点都需要一个复制文件任务,并且任务必须位于构建解决方案 ***.sln 步骤之后,构建解决方案 ***.ccproj 步骤之前。