Created
July 14, 2014 19:33
-
-
Save xt0rted/b8c30504f298f2eafb0d to your computer and use it in GitHub Desktop.
Nancy.Viewengines.Razor.0.23.1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
param($installPath, $toolsPath, $package, $project) | |
# This is the MSBuild targets file to add | |
$targetsFile = [System.IO.Path]::Combine($toolsPath, $package.Id + '.targets') | |
# Need to load MSBuild assembly if it's not loaded yet. | |
Add-Type -AssemblyName 'Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' | |
# Grab the loaded MSBuild project for the project | |
# Normalize project path before calling GetLoadedProjects as it performs a string based match | |
$msbuild = [Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection.GetLoadedProjects([System.IO.Path]::GetFullPath($project.FullName)) | Select-Object -First 1 | |
# Make the path to the targets file relative. | |
$projectUri = new-object Uri($project.FullName, [System.UriKind]::Absolute) | |
$targetUri = new-object Uri($targetsFile, [System.UriKind]::Absolute) | |
$relativePath = [System.Uri]::UnescapeDataString($projectUri.MakeRelativeUri($targetUri).ToString()).Replace([System.IO.Path]::AltDirectorySeparatorChar, [System.IO.Path]::DirectorySeparatorChar) | |
# Add the import with a condition, to allow the project to load without the targets present. | |
$import = $msbuild.Xml.AddImport($relativePath) | |
$import.Condition = "Exists('$relativePath')" | |
# Add a target to fail the build when our targets are not imported | |
$target = $msbuild.Xml.AddTarget("EnsureBclBuildImported") | |
$target.BeforeTargets = "BeforeBuild" | |
$target.Condition = "'`$(BclBuildImported)' == ''" | |
# if the targets don't exist at the time the target runs, package restore didn't run | |
$errorTask = $target.AddTask("Error") | |
$errorTask.Condition = "!Exists('$relativePath')" | |
$errorTask.SetParameter("Text", "This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=317567."); | |
$errorTask.SetParameter("HelpKeyword", "BCLBUILD2001"); | |
# if the targets exist at the time the target runs, package restore ran but the build didn't import the targets. | |
$errorTask = $target.AddTask("Error") | |
$errorTask.Condition = "Exists('$relativePath')" | |
$errorTask.SetParameter("Text", "The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568."); | |
$errorTask.SetParameter("HelpKeyword", "BCLBUILD2002"); | |
$project.Save() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
param($installPath, $toolsPath, $package, $project) | |
# Need to load MSBuild assembly if it's not loaded yet. | |
Add-Type -AssemblyName 'Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' | |
# Grab the loaded MSBuild project for the project | |
# Normalize project path before calling GetLoadedProjects as it performs a string based match | |
$msbuild = [Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection.GetLoadedProjects([System.IO.Path]::GetFullPath($project.FullName)) | Select-Object -First 1 | |
# Find all the imports and targets added by this package. | |
$itemsToRemove = @() | |
# Allow many in case a past package was incorrectly uninstalled | |
$itemsToRemove += $msbuild.Xml.Imports | Where-Object { $_.Project.EndsWith($package.Id + '.targets') } | |
$itemsToRemove += $msbuild.Xml.Targets | Where-Object { $_.Name -eq "EnsureBclBuildImported" } | |
# Remove the elements and save the project | |
if ($itemsToRemove -and $itemsToRemove.length) | |
{ | |
foreach ($itemToRemove in $itemsToRemove) | |
{ | |
$msbuild.Xml.RemoveChild($itemToRemove) | out-null | |
} | |
$project.Save() | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment