我想为我的附加组件构建Nuget包,最终用户将使用它作为启动任务进行安装,之后他们将在窗口azure平台上上传他们的应用程序。
我们现在使用一个简单的Web应用程序和一个云项目,使用Nuget最终用户将添加附加软件包,它将在Web应用程序项目中添加2个文件(exe& config)。将启动任务添加到云项目的ServiceDefinition.csdef中,如图所示
我如何创造这种类型的Nuget Pacakge?
提前致谢。
更新
我已经根据NICK的回答尝试了但是我在云项目中遇到了2个webrole的问题,如下图所示。 和错误我得到如下
另外我有一个问题,如果我用命令行安装Nuget包,那我怎么能考虑所有webrole项目在解决方案中添加exe和配置文件?
答案 0 :(得分:3)
Nuget包基于约定工作: http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#From_a_convention_based_working_directory
就exe和配置而言,您可以执行以下操作:
你要为exe做的只是将文件放在lib目录中,并在元数据节点下修改.nuspec文件。应该有一个“文件”节点(如果没有,你可以添加一个)。在文件节点中添加类似的内容:
<file src="content\my.exe" target="content\my.exe" />
配置略有不同。只需将名为myname.config.transform的文件添加到内容目录,然后在.nuspec文件中添加一个条目:
有几点需要注意:
你的配置文件:
<add key="test" value="myval"/>
在你的改造中,你有:
<add key="test" value="myval2"/>
生成的文件如下所示:
<add key="test" value="myval"/>
<add key="test" value="myval2"/>
至于添加启动任务,这对我来说有点棘手(可能有更好的方法)。我在install.ps1中使用了powershell(就像上面的文件一样,但你为它创建了一个“tools”目录):
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);
我希望这会有所帮助。
- 尼克