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
答案 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