/// <summary> /// Creates a file with unique temporary file name with a given extension in the specified folder. /// File is guaranteed to be unique. /// Extension may have an initial period. /// If folder is null, the temporary folder will be used. /// Caller must delete it when finished. /// May throw IOException. /// </summary> internal static string GetTemporaryFile(string directory, string extension, bool createFile = true) { ErrorUtilities.VerifyThrowArgumentLengthIfNotNull(directory, "directory"); ErrorUtilities.VerifyThrowArgumentLength(extension, "extension"); if (extension[0] != '.') { extension = '.' + extension; } try { directory = directory ?? Path.GetTempPath(); Directory.CreateDirectory(directory); string file = Path.Combine(directory, string.Format("tmp{0}{1}", Guid.NewGuid().ToString("N"), extension)); ErrorUtilities.VerifyThrow(!File.Exists(file), "Guid should be unique"); if (createFile) { File.WriteAllText(file, String.Empty); } return(file); } catch (Exception ex) { if (ExceptionHandling.NotExpectedException(ex)) { throw; } throw new IOException(ResourceUtilities.FormatResourceString("Shared.FailedCreatingTempFile", ex.Message), ex); } }
/// <summary> /// This method is used to flag errors in the project file being processed. Do NOT use this method in place of /// ErrorUtilities.VerifyThrow(), because ErrorUtilities.VerifyThrow() is used to flag internal/programming errors. /// /// PERF WARNING: calling a method that takes a variable number of arguments is expensive, because memory is allocated for /// the array of arguments -- do not call this method repeatedly in performance-critical scenarios /// </summary> /// <param name="condition">The condition to check.</param> /// <param name="errorSubCategoryResourceName">The resource string for the error sub-category (can be null).</param> /// <param name="projectFile">The invalid project file.</param> /// <param name="innerException">The inner <see cref="Exception"/>.</param> /// <param name="resourceName">The resource string for the error message.</param> /// <param name="args">Extra arguments for formatting the error message.</param> internal static void VerifyThrowInvalidProjectFile ( bool condition, string errorSubCategoryResourceName, BuildEventFileInfo projectFile, Exception innerException, string resourceName, params object[] args ) { ErrorUtilities.VerifyThrow(projectFile != null, "Must specify the invalid project file. If project file is not available, use VerifyThrowInvalidProject() and pass in the XML node instead."); #if DEBUG if (errorSubCategoryResourceName != null) { ResourceUtilities.VerifyResourceStringExists(errorSubCategoryResourceName); } ResourceUtilities.VerifyResourceStringExists(resourceName); #endif if (!condition) { string errorSubCategory = null; if (errorSubCategoryResourceName != null) { errorSubCategory = AssemblyResources.GetString(errorSubCategoryResourceName); } string errorCode; string helpKeyword; string message = ResourceUtilities.FormatResourceString(out errorCode, out helpKeyword, resourceName, args); throw new InvalidProjectFileException(projectFile.File, projectFile.Line, projectFile.Column, projectFile.EndLine, projectFile.EndColumn, message, errorSubCategory, errorCode, helpKeyword, innerException); } }