【问题标题】:MSBuild unable to find directory in Azure cloudservice csdef fileMSBuild 无法在 Azure 云服务 csdef 文件中找到目录
【发布时间】:2015-08-14 20:03:07
【问题描述】:

我有一个云项目,在这样的目录结构中设置了两个 Web 角色:

C:\我的工作\我的项目\ 解决方案.sln \CloudService\CloudService.ccproj \WebRole1\WebRole1.csproj \WebRole2\WebRole2.csproj

我的云服务 .csdef 是:

<ServiceDefinition name="CloudService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
  <WebRole name="WebRole1" vmsize="Small">
    <Sites>
      <Site name="WebRole1" 
            physicalDirectory="..\..\..\WebRole1\publish\_PublishedWebsites\WebRole1">
        <Bindings>
          <Binding name="http" 
                   endpointName="http" 
                   hostHeader="WebRole1.cloudapp.net" />
        </Bindings>
      </Site>
      <Site name="WebRole2" 
            physicalDirectory="..\..\..\WebRole2\publish\_PublishedWebsites\WebRole2">
        <Bindings>
          <Binding name="http" 
                   endpointName="http" 
                   hostHeader="WebRole2.cloudapp.net" />
        </Bindings>
      </Site>
    </Sites>

    -snip-

当我在 VS2015 中打包 CloudService 项目时,该包在构建的 WebRoles 和包内都按预期创建良好。它上传到 Azure,并且两个 WebRoles 都处于活动状态且没有错误。

但是,如果我通过命令行使用 MSBuild 构建:

msbuild /t:corepublish;package /p:visualstudioversion=14.0;targetframeworkversion=4.5;roletargetframework=4.5;config uration=调试

我在 CorePublish 期间收到以下错误:

核心发布: CorePublish:PackageWebRole = True 发布开始... 角色插件是 导入的模块是 发布到“Publishapp.publish\” 创建目录“Publishapp.publish\”。 TargetServiceDefinition 是 Publish\ServiceDefinition.csdef TargetServiceConfiguration 是 Publish\ServiceConfiguration.cscfg 角色是 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Windows Azure Tools\2.6\Microsoft.WindowsAzure.targets(3003,5):警告:CloudServices68:没有为角色 WebRole1 指定 TargetFrameworkVersion。使用 .NET framework v4.0 进行打包。 [c:\mywork\myproject\CloudService\CloudService.ccproj] c:\mywork\myproject\CloudService\Publish\ServiceDefinition.csdef : 错误 CloudServices079: 找不到虚拟路径 WebRole1/ 的物理目录 'c:\mywork\WebRole1\publish\_PublishedWebsites\WebRole1'。 [c:\mywork\myproject\CloudService\CloudService.ccproj] 完成构建项目“c:\mywork\myproject\CloudService\CloudService.ccproj”(发布目标)——失败。 完成构建项目“c:\mywork\myproject\Solution.sln”(重建;发布目标)——失败。 完成构建项目“c:\mywork\myproject\cloudservice\cloudservice.ccproj”(corepublish;包目标)——失败。

如您所见,MSBuild 正在这里寻找 WebRole1:c:\mywork\WebRole1,而它应该在这里寻找:c:\mywork\myproject\WebRole1

那么为什么打包云服务在 VS2015 中工作,而不是在 MSBuild 中?

【问题讨论】:

    标签: c# visual-studio azure msbuild visual-studio-2015


    【解决方案1】:

    我遇到了一个非常相似的问题,在我的情况下,我必须更新 MyProject.Azure.ccproj 文件,以便它始终在 PublishPath 前面加上 $(ProjectDir)。它最初不是为 TFS 构建做的。我现在使它们相同。不完全确定我得到的 here 的例子是否还相关。

    之前:

        <PropertyGroup Condition=" '$(PublishDestinationPath)'=='' and '$(BuildingInsideVisualStudio)'=='true' ">
      <!-- When Visual Studio build -->
      <PublishDestinationPath>$(ProjectDir)$(OutDir)</PublishDestinationPath>
    </PropertyGroup>
    <PropertyGroup Condition=" '$(PublishDestinationPath)'=='' ">
      <!-- When TFS build -->
      <PublishDestinationPath>$(OutDir)</PublishDestinationPath>
    </PropertyGroup>
    

    之后:

        <PropertyGroup Condition=" '$(PublishDestinationPath)'=='' and '$(BuildingInsideVisualStudio)'=='true' ">
      <!-- When Visual Studio build -->
      <PublishDestinationPath>$(ProjectDir)$(OutDir)</PublishDestinationPath>
    </PropertyGroup>
    <PropertyGroup Condition=" '$(PublishDestinationPath)'=='' ">
      <!-- When TFS build -->
      <PublishDestinationPath>$(ProjectDir)$(OutDir)</PublishDestinationPath>**
    </PropertyGroup>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 2014-08-20
      相关资源
      最近更新 更多