<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <UsingTask TaskName="CheckForPackages" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll"> <ParameterGroup> <Packages ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" /> <PackagesDir ParameterType="System.String" Required="true" /> <CompactMessage ParameterType="System.Boolean" Required="false" /> </ParameterGroup> <Task> <Using Namespace="System" /> <Using Namespace="System.Collections.Generic" /> <Using Namespace="System.IO" /> <Using Namespace="System.Linq" /> <Using Namespace="Microsoft.Build.Framework" /> <Using Namespace="Microsoft.Build.Utilities" /> <Code Type="Fragment" Language="cs"> <![CDATA[ try { string[] dirs = Directory.GetDirectories(PackagesDir); var missingPackages = new List<string>(); foreach (ITaskItem package in Packages) { string packageSpec = package.ItemSpec; bool found = false; foreach (var dir in dirs) if (Path.GetFileName(dir).StartsWith(packageSpec, StringComparison.OrdinalIgnoreCase)) { found = true; break; } if (!found) missingPackages.Add(packageSpec); } if (missingPackages.Any()) { if (CompactMessage) { Log.LogError("NuGet package restore is not currently enabled. For more information, please see: http://aspnetwebstack.codeplex.com/wikipage?title=NuGet+Packages"); } else { Log.LogMessage(MessageImportance.High, "The following NuGet packages have not yet been downloaded:"); foreach (var missingPackage in missingPackages) Log.LogMessage(MessageImportance.High, " " + missingPackage); Log.LogMessage(MessageImportance.High, "For more information on enabling package restore, please see:"); Log.LogMessage(MessageImportance.High, "http://aspnetwebstack.codeplex.com/wikipage?title=NuGet+Packages"); } return false; } return true; } catch (Exception ex) { Log.LogErrorFromException(ex); return false; } ]]> </Code> </Task> </UsingTask> <UsingTask TaskName="RegexReplace" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll"> <ParameterGroup> <Files ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" /> <Find ParameterType="System.String" Required="true" /> <Replace ParameterType="System.String" Required="true" /> <WarnOnNoMatch ParameterType="System.Boolean" Required="false" /> </ParameterGroup> <Task> <Using Namespace="System" /> <Using Namespace="System.IO" /> <Using Namespace="System.Text" /> <Using Namespace="System.Text.RegularExpressions" /> <Using Namespace="Microsoft.Build.Framework" /> <Using Namespace="Microsoft.Build.Utilities" /> <Code Type="Fragment" Language="cs"> <![CDATA[ try { Regex regex = new Regex(Find, RegexOptions.Multiline | RegexOptions.Compiled); foreach (ITaskItem file in Files) { string fullPath = Path.GetFullPath(file.ItemSpec); string originalText = File.ReadAllText(fullPath); bool matched = regex.IsMatch(originalText); if (!matched) { if (WarnOnNoMatch) { Log.LogWarning("No matches for '{0}' in '{1}'.", Find, fullPath); } } else { File.SetAttributes(fullPath, File.GetAttributes(fullPath) & ~FileAttributes.ReadOnly); File.WriteAllText(fullPath, regex.Replace(originalText, Replace), Encoding.UTF8); } } return true; } catch (Exception ex) { Log.LogErrorFromException(ex); return false; } ]]> </Code> </Task> </UsingTask> </Project>