10

我尝试将此添加到我的 ServiceDefinition.csdef 文件中:

<WorkerRole ...><Runtime><Environment>
    <Variable name="AZURE_STORAGE_ACCOUNT">
      <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/ConfigurationSettings/ConfigurationSetting[@name='AZURE_STORAGE_ACCOUNT']/@value" />
    </Variable>
</Environment></Runtime></WorkerRole>

我在我的 ServiceConfiguration.Cloud.cscfg 文件中设置了配置设置:

<Role name="WorkerRole">
  <ConfigurationSettings>
    <Setting name="AZURE_STORAGE_ACCOUNT" value="<secret stuff>" />
  </ConfigurationSettings>
</Role>

但是当我运行时出现以下错误cspack

CloudServices091 : The '/RoleEnvironment/CurrentInstance/Configur
ationSettings/ConfigurationSetting[@name='AZURE_STORAGE_ACCOUNT']/@value' is an
invalid xpath expression.
4

4 回答 4

8

您是否缺少该设置的声明?我在您的 中没有看到适当的元素.csdef,例如<ConfigurationSettings><Setting name="AZURE_STORAGE_ACCOUNT"/></ConfigurationSettings>. 您需要其中的一个.csdef,然后您仍然需要.cscfg包含该值的那个。

如果您使用的是 Visual Studio,那么如果您使用它的属性视图,它应该会为您编辑这两个文件。(只需双击角色,然后单击周围即可进入配置设置并添加新角色。)

于 2012-05-03T16:32:48.370 回答
0

配置似乎是正确的。如果您能确保您使用的是最新的 SDK,那就更好了。xPath 功能在 Windows Azure SDK 1.5 及更高版本中可用。

此致,

明旭。

于 2012-05-03T07:55:36.207 回答
0

我尝试了博客中提到的不同选项,例如在 .cscfg 和 .csdef 中都包含设置。但是,它似乎不起作用。此外,其他 Xpath 查询如

      <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/@id"/>

正常工作。

最后,我发现使用的变量名不同:

在 cscfg 我有:

<Setting name="WFFEPeriodicRestartTime" value="168:00:00" />

在csdef中我有:

  <ConfigurationSettings>
      <Setting name="PeriodicRestartTime" />
   </ConfigurationSettings>

…………

 <Variable name="PeriodicRestartTime">
            <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/ConfigurationSettings/ConfigurationSetting[@name='WFFEPeriodicRestartTime']/@value" />
  </Variable>

将 csdef 更改为:

<ConfigurationSettings>
      <Setting name="WFFEPeriodicRestartTime" />
   </ConfigurationSettings>

…………

 <Variable name="WFFEPeriodicRestartTime">
            <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/ConfigurationSettings/ConfigurationSetting[@name='WFFEPeriodicRestartTime']/@value" />
          </Variable>

它现在似乎可以正常工作

于 2013-11-12T10:53:02.363 回答
0

在这里遇到了同样的问题,因为我试图通过此处提供的示例读取配置值:https ://docs.microsoft.com/en-us/azure/cloud-services/cloud-services-role-config-xpath#配置设置- 在这个过程中失去了很多脑细胞!

诀窍是,这并不意味着您从 web.config 中读取配置值(这是我误读的方式),而是从 cscfg 文件中的设置中读取。

对于云服务,您有 1 个适用于所有云服务配置的 csdef 文件,然后是每个环境的 cscfg。在我的场景中,我有用于 DEV、QA、Prod 的 cscfg,我需要根据环境设置不同的变量。

因此,对于 OP 的问题,当您尝试执行“RoleEnvironment/CurrentInstance/ConfigurationSettings..”语句并获取无效的 xpath 值时,它本质上是在说“嘿,我找不到这个值”

如何让魔法发生:

您的 csdef 文件需要以下内容:

<ConfigurationSettings>
    <Setting name="AZURE_STORAGE_ACCOUNT" />
</ConfigurationSettings>

您的 cscfg 然后需要:

<ConfigurationSettings>
      <Setting name="AZURE_STORAGE_ACCOUNT" value="Some Secret Value" />
</ConfigurationSettings>

出于我的目的,我试图在 startup.cmd 文件中使用此值,因此我能够将以下内容添加到我的 csdef 启动任务中

<Startup>
  <Task commandLine="Startup.cmd" executionContext="elevated" taskType="simple">
    <Environment>
      <Variable name="AZURE_STORAGE_ACCOUNT">
        <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/ConfigurationSettings/ConfigurationSetting[@name='AZURE_STORAGE_ACCOUNT']/@value" />
      </Variable>
    </Environment>
  </Task>
</Startup>

然后在我的 startup.cmd 中,您可以将值引用为 %%AZURE_STORAGE_ACCOUNT%%

于 2018-05-03T20:33:38.897 回答