CSPACK sitePhysicalDirectories被忽略了吗?

时间:2014-05-13 09:54:16

标签: azure sdk

CSPACK的另一个问题......

我有一个这样的服务定义文件:

<ServiceDefinition name="core-eur" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2014-01.2.3">
    <LoadBalancerProbes>
        <LoadBalancerProbe name="discovery.probe" protocol="http" path="/HealthMonitoring" port="80" intervalInSeconds="8" timeoutInSeconds="16" />
    </LoadBalancerProbes>
    <WebRole name="Discovery.UI" vmsize="ExtraSmall" enableNativeCodeExecution="false">
        <Startup>
            <Task commandLine="startup\CreateCustomEventSource.cmd" executionContext="elevated" taskType="simple" />
        </Startup>
        <Sites>
            <Site name="main">
                <Bindings>
                    <Binding name="https.root" endpointName="https" hostHeader="testingblah.com" />
            </Site>
            <Site name="api" physicalDirectory="..\..\..\catalog\Catalog.Search.API">
                <Bindings>
                    <Binding name="https.root" endpointName="https" hostHeader="api.testingblah.com" />
                </Bindings>
            </Site>
        </Sites>
        <Endpoints>
            <InputEndpoint name="http" protocol="http" port="80" loadBalancerProbe="discovery.probe" />
            <InputEndpoint name="https" protocol="https" port="443" certificate="bibliothecatest.com" />
        </Endpoints>
        <Imports>
            <Import moduleName="RemoteAccess" />
            <Import moduleName="Diagnostics" />
            <Import moduleName="RemoteForwarder" />
        </Imports>
        <Certificates>
            <Certificate name="testingblah.com" storeLocation="LocalMachine" storeName="CA" />
        </Certificates>
    </WebRole>

关键点是网站“主要”和“api”。我没有包含物理目录,因为正如预期的那样,当它们被放入并指向解决方案中的项目文件时,“api”站点未正确打包,因为Visual Studio程序包进程只打包第一个站点(即“api”在其打包文件夹中包含所有未转换的.config文件和.cs文件,而“main”没有 - 它已正确打包,但这是一个已知问题,所以我不会抱怨太多此

因此,要解决它,对于我的构建服务器,我想引入一个CSPACK步骤来正确执行此操作。我使用MSDEPLOY将“主”和“api”网站预构建到临时位置,然后使用CSPACK创建包文件。

每次使用“CloudService077:需要指定虚拟路径的主要/角色”Discovery.UI“的物理目录时失败。但是,我在CSPACK中包含 / sitePhysicalDirectories值,即

cspack %root%\ServiceDefinition.csdef ^
    /role:Discovery.UI;%compiled%\discovery\Discovery.UI\ ^
    /sitePhysicalDirectories:Discovery.UI;main;%compiled%\discovery\Discovery.UI\ ^
    /sitePhysicalDirectories:Discovery.UI;api;%compiled%\catalog\Catalog.Search.Api\ ^
    /rolePropertiesFile:Discovery.UI;Properties.txt ^
    /out:%output% /copyOnly

如果我将sitePhysicalDirectories属性放回ServiceDefinition文件中,并将其指向Visual Studio中的项目目录位置(例如)

<Site name="main" physicalDirectory="..\..\..\discovery\Discovery.UI">

然后CSPACK因CloudServices079失败:无法找到虚拟路径main的物理目录“nnn”/

尽管CSPACK命令行/ sitePhysicalDirectories是正确的。发生的事情是CSPACK采用ServiceDefinition值,应用相对路径值并指向完全错误的位置。

如果我更新ServiceDefinition以使用相同的物理位置(例如C:\ .... \ nnnn而不是我在CSPACK命令行中传递的“...... \ nnnn”,那么一切正常!

所以看起来CSPACK忽略了参数而不能覆盖值,这不是我真正需要的。这是正确的还是我应该将其他东西传递给CSPACK?

Azure SDK 2.3

1 个答案:

答案 0 :(得分:0)

我知道事情已经很久了,但我也遇到了无穷无尽的CSPACK问题。基本上不可能找到任何有用的信息。

我发现,如果你没有正确提供参数,你会得到各种各样的“找不到物理目录......”和“需要指定物理目录...”错误,有时会使用您未提供的目录。

感谢this powershell script我能够使用正确的格式执行它并学习以下内容:
1.您必须指定/role:参数。 /sites参数是您在此处指定的角色的扩展名 2.将所有站点放在一个/sites参数或一个/sitePhysicalDirectories参数中。我为我的构建使用/sites参数。

对于上面的例子,我会尝试: cspack %root%\ServiceDefinition.csdef /role:Discovery.UI;%compiled%\discovery\Discovery.UI\ /sites:Discovery.UI;main;%compiled%\discovery\Discovery.UI\;api;%compiled%\catalog\Catalog.Search.Api\ /rolePropertiesFile:Discovery.UI;Properties.txt /out:%output% /copyOnly