diff --git a/src/Tasks.UnitTests/GenerateResource_Tests.cs b/src/Tasks.UnitTests/GenerateResource_Tests.cs index d05bea10376..23c0e4bb536 100644 --- a/src/Tasks.UnitTests/GenerateResource_Tests.cs +++ b/src/Tasks.UnitTests/GenerateResource_Tests.cs @@ -3135,6 +3135,55 @@ public void ResxValueNewlines(string newline) } } } + + [Fact] + public void RebuildsInPresenceOfFileRefWithWindowsPath() + { + using (var env = TestEnvironment.Create()) + { + env.SetCurrentDirectory(env.DefaultTestDirectory.FolderPath); + + string fileRef = "" + + $".\\tmp_dir\\test_file.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252"; + + env.CreateFile( + env.CreateFolder(Path.Combine(env.DefaultTestDirectory.FolderPath, "tmp_dir")), + "test_file.txt", "xyz"); + + string resxFile = env.CreateFile("test.resx").Path; + Utilities.WriteTestResX(false, null, fileRef, false, resxFile); + + GenerateResource ExecuteTask() + { + GenerateResource task = Utilities.CreateTask(_output); + task.Sources = new ITaskItem[] { new TaskItem(resxFile) }; + + Utilities.ExecuteTask(task); + + string outputResourceFile = task.OutputResources[0].ItemSpec; + Assert.Equal(Path.GetExtension(outputResourceFile), ".resources"); + outputResourceFile = task.FilesWritten[0].ItemSpec; + Assert.Equal(Path.GetExtension(outputResourceFile), ".resources"); + + return task; + } + + GenerateResource t = ExecuteTask(); + string resourcesFile = t.OutputResources[0].ItemSpec; + DateTime initialWriteTime = File.GetLastWriteTime(resourcesFile); + + // fs granularity on HFS is 1 sec! + System.Threading.Thread.Sleep(NativeMethodsShared.IsOSX ? 1000 : 100); + + // Rebuild, it shouldn't regen .resources file since the sources + // haven't changed + t = ExecuteTask(); + resourcesFile = t.OutputResources[0].ItemSpec; + + Assert.False(Utilities.FileUpdated(resourcesFile, initialWriteTime)); + } + } + } } diff --git a/src/Tasks/ResGenDependencies.cs b/src/Tasks/ResGenDependencies.cs index 02a29405d37..aedea58244c 100644 --- a/src/Tasks/ResGenDependencies.cs +++ b/src/Tasks/ResGenDependencies.cs @@ -266,7 +266,7 @@ internal static string[] GetLinkedFiles(string filename, string baseLinkedFileDi { ResXFileRef resxFileRef = ((ResXDataNode)dictEntry.Value).FileRef; if (resxFileRef != null) - retVal.Add(resxFileRef.FileName); + retVal.Add(FileUtilities.MaybeAdjustFilePath(resxFileRef.FileName)); } } }