diff --git a/src/Fluidify/build/Fluidify.targets b/src/Fluidify/build/Fluidify.targets index 50c837a..c93bbd2 100644 --- a/src/Fluidify/build/Fluidify.targets +++ b/src/Fluidify/build/Fluidify.targets @@ -7,13 +7,13 @@ Condition="'@(Fluidify)' != ''"> - %(RootDir)%(Directory)%(Filename) + %(RelativeDir)%(Filename) %(Fluidify.Destination) - $(MSBuildProjectDirectory)\%(Fluidify.Destination) + %(Fluidify.Destination) diff --git a/tests/Fluidify.Tests.Functional/CompileTests.cs b/tests/Fluidify.Tests.Functional/CompileTests.cs index 92e2839..b5a297e 100644 --- a/tests/Fluidify.Tests.Functional/CompileTests.cs +++ b/tests/Fluidify.Tests.Functional/CompileTests.cs @@ -72,6 +72,24 @@ public async Task GeneratedCsFile_CompileFalse_IsExcludedFromCompilation() "Expected a missing type/namespace compiler error"); } + [Test] + public async Task RebuildWithExistingOutput_NoDuplicateCompileWarning() + { + string compileAppProject = Path.Combine(CompileAppDir, "CompileApp.csproj"); + + // First build: generates the .cs file on disk + (int ExitCode, string Output) firstBuild = await RunDotnet($"build \"{compileAppProject}\" --force"); + Assert.That(firstBuild.ExitCode, Is.EqualTo(0), + $"First build failed:\n{firstBuild.Output}"); + + // Second build: SDK glob picks up the file AND Fluidify adds it — should not duplicate + (int ExitCode, string Output) secondBuild = await RunDotnet($"build \"{compileAppProject}\" --force"); + Assert.That(secondBuild.ExitCode, Is.EqualTo(0), + $"Second build failed:\n{secondBuild.Output}"); + Assert.That(secondBuild.Output, Does.Not.Contain("CS2002"), + $"Duplicate compile warning detected on rebuild:\n{secondBuild.Output}"); + } + private static async Task<(int ExitCode, string Output)> RunDotnet(string arguments) { ProcessStartInfo psi = new ProcessStartInfo("dotnet", arguments)