@@ -113,15 +113,19 @@ open System.Reflection"
113113let sb = StringBuilder() .AppendLine( boilerplate) .AppendLine()
114114let code = Array.fold( fun ( sb : StringBuilder ) ( item : ITaskItem ) -> sb.AppendLine( WriteCodeFragment.GenerateAttribute item)) sb_ assemblyAttributes
115115 code.AppendLine() .AppendLine( " do()" ) |> ignore
116+ let fileName = _ outputFile.ItemSpec
116117let outputFileItem =
117- if not ( isNull_ outputFile) && not ( isNull_ outputDirectory) && not ( Path.IsPathRooted(_ outputFile.ItemSpec )) then
118- TaskItem( Path.Combine(_ outputDirectory.ItemSpec, _ outputFile.ItemSpec )) :> ITaskItem
118+ if not ( isNull_ outputFile) && not ( isNull_ outputDirectory) && not ( Path.IsPathRooted( fileName )) then
119+ TaskItem( Path.Combine(_ outputDirectory.ItemSpec, fileName )) :> ITaskItem
119120elif isNull_ outputFilethen
120121let tempFile = Path.Combine( Path.GetTempPath(), sprintf" tmp%s .fs" ( Guid.NewGuid() .ToString( " N" )))
121122 TaskItem( tempFile) :> ITaskItem
122123else
123124_ outputFile
124- File.WriteAllText(_ outputFile.ItemSpec, code.ToString())
125+ let codeText = code.ToString()
126+ let alreadyExists = ( try File.Exists fileName&& File.ReadAllText( fileName) = codeTextwith _ -> false )
127+ if not alreadyExiststhen
128+ File.WriteAllText( fileName, codeText)
125129_ outputFile<- outputFileItem
126130true
127131with e->