2

我正在尝试使用 Powershell“Publish-AzureServiceProject”cmdlet 将 Node.js 包发布到 Azure。

使用默认的 osFamily="2" (Windows Server 2008 R2) 它可以按预期工作,但是当我使用 osFamily="3" (Windows Server 2012) 发布时,我收到以下错误:

上载包所需的名为 NetFx35 的功能在为部署选择的操作系统 * 中不可用。

显然我没有使用 .Net 但 3.5 是阻止我上传包的默认设置。

要指定 .Net 4.5,我读到我需要创建一个 roleproperties.txt 文件,其中包含:

TargetFrameWorkVersion=v4.5

并通过 /rolePropertiesFile 将其传递给 cspack。

但是,由于我自己没有调用 cspack,如何通过 Publish-AzureServiceProject 将该选项传递给 cspack?还是有其他解决方法?


目前我的 ServiceDefinition 看起来像这样:

<?xml version="1.0"?>
<ServiceDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="Foo" upgradeDomainCount="1" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WorkerRole name="Bar">
    <Imports>
      <Import moduleName="RemoteForwarder" />
      <Import moduleName="RemoteAccess" />
    </Imports>
    <Startup>
      <Task commandLine="setup_worker.cmd &gt; log.txt" executionContext="elevated">
        <Environment>
          <Variable name="EMULATED">
            <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
          </Variable>
          <Variable name="RUNTIMEID" value="node" />
          <Variable name="RUNTIMEURL" value="http://nodertncu.blob.core.windows.net/node/0.6.20.exe" />
        </Environment>
      </Task>
    </Startup>
    <Endpoints>
      <InputEndpoint name="HttpIn" protocol="tcp" port="80" />
    </Endpoints>
    <Runtime>
      <Environment>
        <Variable name="PORT">
          <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/Endpoints/Endpoint[@name='HttpIn']/@port" />
        </Variable>
        <Variable name="EMULATED">
          <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
        </Variable>
      </Environment>
      <EntryPoint>
        <ProgramEntryPoint commandLine="runnode.cmd" setReadyOnProcessStart="true" />
      </EntryPoint>
    </Runtime>
  </WorkerRole>
</ServiceDefinition>
4

2 回答 2

1

由于 Node SDK 在不使用 cspack.exe 的情况下构建包(以保持平台独立架构),因此您不能使用“/rolePropertiesFile”选项。

作为解决方法,您可以在 ServiceDefinition 中使用Runtime -> EntryPoint -> NetFxEntryPoint -> targetFrameworkVersion="v4.5"设置 targetFrameworkVersion 设置,如下例所示:

<?xml version="1.0"?>
<ServiceDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="NodeAvkash" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="WebRole1" vmsize="ExtraSmall">
    <Imports />
    <Startup>
      <Task commandLine="setup_web.cmd &gt; log.txt" executionContext="elevated">
        <Environment>
          <Variable name="EMULATED">
            <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
          </Variable>
          <Variable name="RUNTIMEID" value="node;iisnode" />
          <Variable name="RUNTIMEURL" value="http://nodertncu.blob.core.windows.net/node/0.6.20.exe;http://nodertncu.blob.core.windows.net/iisnode/0.1.21.exe" />
        </Environment>
      </Task>
    </Startup>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="http" port="80" />
    </Endpoints>
    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="Endpoint1" endpointName="Endpoint1" />
        </Bindings>
      </Site>
    </Sites>
    <Runtime executionContext="elevated">
      <EntryPoint>
        <NetFxEntryPoint assemblyName="WebRole1.dll" targetFrameworkVersion="v4.5" />
      </EntryPoint>
    </Runtime>
  </WebRole>
</ServiceDefinition>
于 2012-12-24T19:41:23.257 回答
1

因此,目前,您需要做一些工作才能让 OSFamily=3 与非 .Net 角色一起工作。本质上,您需要自己运行 cspack 来创建一个包并指定一个允许您以 .Net 4.5 为目标的角色属性文件(是的,即使您根本不使用 .Net,您也需要让 cspack 工具相信您重新使用.Net 4.5)。

以下是步骤:

  1. 去创建一个具有 Web 角色的新节点项目。
  2. 修改 cscfg 以设置 OS Family = 3。
  3. 将以下 roleproperties.txt 拖放到服务的根目录中。
  4. 启动“Windows Azure 命令提示符”,然后转到服务根文件夹。
  5. 运行此命令:cspack ServiceDefinition.csdef /role:WebRole1;WebRole1 /sites:WebRole1;Web;WebRole1 /rolePropertiesFile:WebRole1;RoleProperties.txt /out:package.cspkg
  6. 登录门户并手动创建服务/上传 cspkg

roleproperties.txt 的内容:

TargetFrameworkVersion=v4.5

于 2013-03-14T04:11:50.013 回答