diff --git a/src/Microsoft.Build.Sql/sdk/Sdk.targets b/src/Microsoft.Build.Sql/sdk/Sdk.targets
index f23baff..f04531c 100644
--- a/src/Microsoft.Build.Sql/sdk/Sdk.targets
+++ b/src/Microsoft.Build.Sql/sdk/Sdk.targets
@@ -184,6 +184,22 @@
+
+
+
+
+
+
+ %(ProjectReferenceWithConfiguration.DatabaseSqlCmdVariable)
+
+
+ %(ProjectReferenceWithConfiguration.ServerSqlCmdVariable)
+
+
+ %(ProjectReferenceWithConfiguration.DatabaseVariableLiteralValue)
+
+
+
diff --git a/test/Microsoft.Build.Sql.Tests/BuildTests.cs b/test/Microsoft.Build.Sql.Tests/BuildTests.cs
index 7e2078f..b07e9ec 100644
--- a/test/Microsoft.Build.Sql.Tests/BuildTests.cs
+++ b/test/Microsoft.Build.Sql.Tests/BuildTests.cs
@@ -505,5 +505,56 @@ public void VerifyBuildTargetPath()
Assert.AreEqual(string.Empty, stdError);
StringAssert.Contains($"Target path from PrintTargetPath: {GetDacpacPath()}", stdOutput, "Target path not found in output.");
}
+
+ [Test]
+ // https://github.com/microsoft/DacFx/issues/608
+ [Description("Verifies build with transitive project references with DatabaseSqlCmdVariable should not have name collisions.")]
+ public void VerifyBuildWithTransitiveProjectReferencesWithDatabaseVariables()
+ {
+ // Create 3 sqlproj projects like Sql1, Sql2, Sql3
+ string projectSql1Dir = Path.Combine(WorkingDirectory, "Sql1");
+ string projectSql2Dir = Path.Combine(WorkingDirectory, "Sql2");
+ string projectSql3Dir = Path.Combine(WorkingDirectory, "Sql3");
+ string projectSql1 = Path.Combine(projectSql1Dir, "Sql1.sqlproj");
+ string projectSql2 = Path.Combine(projectSql2Dir, "Sql2.sqlproj");
+ string projectSql3 = Path.Combine(projectSql3Dir, "Sql3.sqlproj");
+
+ // Create identical Table1.sql in all three projects
+ string table1Sql = "CREATE TABLE Table1 (Id INT);\nGO\n";
+ Directory.CreateDirectory(projectSql1Dir);
+ Directory.CreateDirectory(projectSql2Dir);
+ Directory.CreateDirectory(projectSql3Dir);
+
+ File.WriteAllText(Path.Combine(projectSql1Dir, "Table1.sql"), table1Sql);
+ File.WriteAllText(Path.Combine(projectSql2Dir, "Table1.sql"), table1Sql);
+ File.WriteAllText(Path.Combine(projectSql3Dir, "Table1.sql"), table1Sql);
+
+ // Copy from template to create project files
+ File.Copy(
+ Path.Combine(TestContext.CurrentContext.TestDirectory, "Template", "project.sqlproj"),
+ projectSql1);
+ File.Copy(
+ Path.Combine(TestContext.CurrentContext.TestDirectory, "Template", "project.sqlproj"),
+ projectSql2);
+ File.Copy(
+ Path.Combine(TestContext.CurrentContext.TestDirectory, "Template", "project.sqlproj"),
+ projectSql3);
+
+ // Add references with DatabaseSqlCmdVariable
+ // Sql2 references Sql1 with DatabaseSqlCmdVariable="Sql1"
+ ProjectUtils.AddItemGroup(projectSql2, "ProjectReference", new string[] { projectSql1 },
+ item => item.AddMetadata("DatabaseSqlCmdVariable", "Sql1"));
+
+ // Sql3 references Sql2 with DatabaseSqlCmdVariable="Sql2"
+ ProjectUtils.AddItemGroup(projectSql3, "ProjectReference", new string[] { projectSql2 },
+ item => item.AddMetadata("DatabaseSqlCmdVariable", "Sql2"));
+
+ // Build Sql3 project
+ int exitCode = this.RunGenericDotnetCommand($"build {projectSql3}", out string stdOutput, out string stdError);
+
+ // Build should succeed - different databases should not have name collisions
+ Assert.AreEqual(0, exitCode, "Build failed with error " + stdError);
+ Assert.AreEqual(string.Empty, stdError);
+ }
}
}
\ No newline at end of file
diff --git a/test/Microsoft.Build.Sql.Tests/Microsoft.Build.Sql.Tests.csproj b/test/Microsoft.Build.Sql.Tests/Microsoft.Build.Sql.Tests.csproj
index 75dbe86..0fcbfdd 100644
--- a/test/Microsoft.Build.Sql.Tests/Microsoft.Build.Sql.Tests.csproj
+++ b/test/Microsoft.Build.Sql.Tests/Microsoft.Build.Sql.Tests.csproj
@@ -3,7 +3,7 @@
- net8.0;net9.0;net10.0
+ net8.0
enable
false