Skip to content

Commit 5778159

Browse files
authored
Return false if there are no existent inputs to GenerateResource (#9208)
Fixes #9199 by avoiding an unhandled exception: ``` "C:\temp\testgenres\project.proj" (default target) (1) -> MSBUILD : error : This is an unhandled exception in MSBuild -- PLEASE UPVOTE AN EXISTING ISSUE OR FILE A NEW ONE AT https://aka.ms/msbuild/unhandled [C:\temp\testgenres\project.proj] MSBUILD : error : Microsoft.Build.Framework.InternalErrorException: MSB0001: Internal MSBuild Error: There should be resource files to process [C:\temp\testgenres\project.proj] MSBUILD : error : at Microsoft.Build.Shared.ErrorUtilities.ThrowInternalError(String message, Exception innerException, Object[] args) [C:\temp\testgenres\project.proj] MSBUILD : error : at Microsoft.Build.Tasks.GenerateResource.TransformResourceFilesUsingResGen(List`1 inputsToProcess, List`1 outputsToProcess) [C:\temp\testgenres\project.proj] MSBUILD : error : at Microsoft.Build.Tasks.GenerateResource.GenerateResourcesUsingResGen(List`1 inputsToProcess, List`1 outputsToProcess) [C:\temp\testgenres\project.proj] MSBUILD : error : at Microsoft.Build.Tasks.GenerateResource.Execute() [C:\temp\testgenres\project.proj] ```
1 parent 26a4fc6 commit 5778159

File tree

2 files changed

+32
-9
lines changed

2 files changed

+32
-9
lines changed

src/Tasks.UnitTests/ResourceHandling/GenerateResource_Tests.cs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
using Microsoft.Build.Framework;
1212
using Microsoft.Build.Shared;
1313
using Microsoft.Build.Tasks;
14+
using Microsoft.Build.UnitTests.Shared;
1415
using Microsoft.Build.Utilities;
1516
using Shouldly;
1617
using Xunit;
@@ -338,7 +339,7 @@ public void ForceOutOfDate()
338339
/* Unmerged change from project 'Microsoft.Build.Tasks.UnitTests (net7.0)'
339340
Before:
340341
Utilities.AssertLogContainsResource(t, "GenerateResource.OutputDoesntExist", t.OutputResources[0].ItemSpec);
341-
342+
342343
Utilities.AssertStateFileWasWritten(t);
343344
After:
344345
Utilities.AssertLogContainsResource(t, "GenerateResource.OutputDoesntExist", t.OutputResources[0].ItemSpec);
@@ -1718,7 +1719,7 @@ public void FailedResXReader()
17181719
/* Unmerged change from project 'Microsoft.Build.Tasks.UnitTests (net7.0)'
17191720
Before:
17201721
Assert.False(success);
1721-
1722+
17221723
Utilities.AssertStateFileWasWritten(t);
17231724
After:
17241725
Assert.False(success);
@@ -1797,7 +1798,7 @@ public void FailedResXReaderWithAllOutputResourcesSpecified()
17971798
/* Unmerged change from project 'Microsoft.Build.Tasks.UnitTests (net7.0)'
17981799
Before:
17991800
Assert.False(success);
1800-
1801+
18011802
Utilities.AssertStateFileWasWritten(t);
18021803
After:
18031804
Assert.False(success);
@@ -2317,7 +2318,7 @@ public void OutputFilesPartialInputs()
23172318
/* Unmerged change from project 'Microsoft.Build.Tasks.UnitTests (net7.0)'
23182319
Before:
23192320
Assert.Equal(t.FilesWritten[2].ItemSpec, Path.ChangeExtension(t.Sources[3].ItemSpec, ".resources"));
2320-
2321+
23212322
Utilities.AssertStateFileWasWritten(t);
23222323
After:
23232324
Assert.Equal(t.FilesWritten[2].ItemSpec, Path.ChangeExtension(t.Sources[3].ItemSpec, ".resources"));
@@ -3653,6 +3654,20 @@ GenerateResource ExecuteTask()
36533654
Utilities.FileUpdated(resourcesFile, initialWriteTime).ShouldBeFalse();
36543655
}
36553656
}
3657+
3658+
/// <summary>
3659+
/// https://github.com/dotnet/msbuild/issues/9199
3660+
/// </summary>
3661+
[Fact]
3662+
public void NotValidSources()
3663+
{
3664+
GenerateResource t = new GenerateResource { BuildEngine = new MockEngine(_output) };
3665+
t.Sources = new ITaskItem[] { new TaskItem("non-existent") };
3666+
t.OutputResources = new ITaskItem[] { new TaskItem("out") };
3667+
Assert.False(t.Execute());
3668+
((MockEngine)t.BuildEngine).AssertLogContains("MSB3552");
3669+
Assert.Equal(1, ((MockEngine)t.BuildEngine).Errors);
3670+
}
36563671
}
36573672
}
36583673

src/Tasks/GenerateResource.cs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -714,14 +714,22 @@ public override bool Execute()
714714

715715
GetResourcesToProcess(out inputsToProcess, out outputsToProcess, out cachedOutputFiles);
716716

717-
if (inputsToProcess.Count == 0 && !Log.HasLoggedErrors)
717+
if (inputsToProcess.Count == 0)
718718
{
719-
if (cachedOutputFiles.Count > 0)
719+
if (!Log.HasLoggedErrors)
720720
{
721-
OutputResources = cachedOutputFiles.ToArray();
722-
}
721+
if (cachedOutputFiles.Count > 0)
722+
{
723+
OutputResources = cachedOutputFiles.ToArray();
724+
}
723725

724-
Log.LogMessageFromResources("GenerateResource.NothingOutOfDate");
726+
Log.LogMessageFromResources("GenerateResource.NothingOutOfDate");
727+
}
728+
else
729+
{
730+
// No valid sources found--failures should have been logged in GetResourcesToProcess
731+
return false;
732+
}
725733
}
726734
else if (FailIfNotIncremental)
727735
{

0 commit comments

Comments
 (0)