2

Powershellの「Publish-AzureServiceProject」コマンドレットを使用してNode.jsパッケージをAzureに公開しようとしています。

デフォルトのosFamily="2"(Windows Server 2008 R2)では期待どおりに機能しますが、osFamily = "3"(Windows Server 2012)を使用して公開すると、次のエラーが発生します。

アップロードされたパッケージに必要なNetFx35という名前の機能は、展開用に選択されたOS*では使用できません。

明らかに私は.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 をターゲットにすることを可能にする roleProperties ファイルを指定する必要があります (はい、.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 に答える