Azure 使用云配置(ServiceDefinition.csdef)文件的配置创建Nuget包

Azure 使用云配置(ServiceDefinition.csdef)文件的配置创建Nuget包,azure,nuget-package,Azure,Nuget Package,我想为我的附加组件构建Nuget软件包,最终用户将使用该软件包作为启动任务进行安装,然后他们将在WindowsAzure平台上上载应用程序 让我们看一个简单的web应用程序和一个现在使用Nuget的云项目,最终用户将添加附加包,它将在web应用程序项目中添加2个文件(exe和config),并将启动任务添加到云项目的ServiceDefinition.csdef,如图所示 我如何创建这种类型的Nuget Pacake 提前谢谢 更新: 我已经试着按照NICK的答案来做了,但是我在云项目中遇到了

我想为我的附加组件构建Nuget软件包,最终用户将使用该软件包作为启动任务进行安装,然后他们将在WindowsAzure平台上上载应用程序

让我们看一个简单的web应用程序和一个现在使用Nuget的云项目,最终用户将添加附加包,它将在web应用程序项目中添加2个文件(exe和config),并将启动任务添加到云项目的ServiceDefinition.csdef,如图所示

我如何创建这种类型的Nuget Pacake

提前谢谢

更新:

我已经试着按照NICK的答案来做了,但是我在云项目中遇到了问题,如下图所示。 我得到的错误如下所示


还有一个问题,如果我用命令行安装NuGET包,那么我如何考虑所有WEBROLE项目在解决方案中添加EXE和配置文件??< /P> < P> NuGET包基于一个约定工作:

对于exe和config,您可以执行以下操作:

  • 在包目录中创建以下目录
    • mkdir lib(用于exe)
    • mkdir内容(用于配置)
  • 对于exe,您所要做的就是将该文件放到lib目录中,并在元数据节点下修改您的.nuspec文件。应该有一个“文件”节点(如果没有,您可以添加一个)。在“文件”节点中添加类似的内容:

    <file src="content\my.exe" target="content\my.exe" />
    
    我希望这能有所帮助


    --尼克

    谢谢尼克的帮助。它工作得很好,但是我对云项目中的webrole 2有一个问题。你能看看我更新的问题吗?为了清楚起见,你想在两个Web角色中都添加一个启动任务吗?如果是这样,您可以尝试以下操作:
    foreach($xml.ServiceDefinition.ChildNodes中的i){#在此处添加任务逻辑}
    <add key="test" value="myval"/>
    
    <add key="test" value="myval2"/>
    
    <add key="test" value="myval"/>
    <add key="test" value="myval2"/>
    
    param($installPath, $toolsPath, $package, $project)
    
    #Modify the service config - adding a new Startup task
    $svcConfigFile = $DTE.Solution.Projects|Select-Object -Expand ProjectItems|Where-Object{$_.Name -eq 'ServiceDefinition.csdef'}
    $ServiceDefinitionConfig = $svcConfigFile.Properties.Item("FullPath").Value
    [xml] $xml = gc $ServiceDefinitionConfig
    
    #Create startup and task nodes
    
    # So that you dont get the blank ns in your node
    $startupNode = $xml.CreateElement('Startup','http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition')
    $taskNode = $xml.CreateElement('Task','http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition')
    $taskNode.SetAttribute('commandLine','my.exe')
    $taskNode.SetAttribute('executionContext','elevated')
    $taskNode.SetAttribute('taskType','simple')
    $startupNode.AppendChild($taskNode)
    
    #Check to see if the startup node exists
    $modified = $xml.ServiceDefinition.WebRole.StartUp
    if($modified -eq $null){
        $modified = $xml.ServiceDefinition.WebRole
        $modified.PrependChild($startupNode)
    }
    else{
        $nodeExists = $false
        foreach ($i in $xml.ServiceDefinition.WebRole.Startup.Task){
            if ($i.commandLine -eq 'my.exe'){
                $nodeExists = $true
            }
        }
        if($taskNode -eq $null -and !$nodeExists){
            $modified.AppendChild($taskNode)
        }
    }
    $xml.Save($ServiceDefinitionConfig);