New-ALNuSpec.ps1
function New-ALNuSpec { Param( [Parameter(ValueFromPipelineByPropertyName=$True)] $AppFile, [Parameter(ValueFromPipelineByPropertyName=$True)] $AppName, [Parameter(ValueFromPipelineByPropertyName=$True)] $Publisher, [Parameter(ValueFromPipelineByPropertyName=$True)] $AppVersion, $NuspecFileName, $id, $authors='', $owners='', $licenseUrl='', $projectUrl='', $iconUrl='', $releaseNotes='', $description='', $copyright='', $tags='', $AppDependencies, $IdPrefix, #Will be used before AppName and all Dependency names $DependencyFormat='$($Dep.publisher)_$($Dep.name)' ) $nuspec =@() $xmltext = @" <?xml version="1.0"?> <package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd"> <metadata> <id>$IdPrefix$(Format-AppNameForNuget $id)</id> <version>$AppVersion</version> <authors>$([Security.SecurityElement]::Escape($authors))</authors> <owners>$([Security.SecurityElement]::Escape($owners))</owners> "@ if ($licenseUrl) { $xmltext +=" <licenseUrl>$([Security.SecurityElement]::Escape($licenseUrl))</licenseUrl>" } if ($projectUrl) { $xmltext +=" <projectUrl>$([Security.SecurityElement]::Escape($projectUrl))</projectUrl>" } if ($iconUrl) { $Xmltext +=" <iconUrl>$([Security.SecurityElement]::Escape($iconUrl))</iconUrl>" } $xmltext +=@" <releaseNotes>$([Security.SecurityElement]::Escape($releaseNotes))</releaseNotes> <description>$([Security.SecurityElement]::Escape($description))</description> <copyright>$([Security.SecurityElement]::Escape($copyright))</copyright> <tags>$([Security.SecurityElement]::Escape($tags))</tags> <dependencies></dependencies> </metadata> <files> <file src="$([Security.SecurityElement]::Escape($(Split-Path -Leaf $AppFile)))" target="" /> </files> </package> "@ $nuspec =[System.Xml.XmlDocument]$xmltext foreach($Dep in $AppDependencies) { if ($Dep.publisher -ne 'Microsoft') { $depXml = $nuspec.CreateElement('dependency','http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd') $attr = $nuspec.CreateAttribute("id") $attr.Value = "$IdPrefix$(Format-AppNameForNuget $ExecutionContext.InvokeCommand.ExpandString($DependencyFormat))" $depXml.Attributes.Append($attr) | out-null $attr = $nuspec.CreateAttribute("version") $attr.Value = $Dep.version if ($Dep.MinVersion) { $attr.Value = $Dep.MinVersion } $depXml.Attributes.Append($attr) | out-null $nuspec.package.metadata.SelectSingleNode("./*[name()='dependencies']").AppendChild($depXml) } } $nuspec.Save($NuspecFileName) } |