diff --git a/src/Microsoft.Build.Sql/sdk/Sdk.targets b/src/Microsoft.Build.Sql/sdk/Sdk.targets
index 432794d..83b798b 100644
--- a/src/Microsoft.Build.Sql/sdk/Sdk.targets
+++ b/src/Microsoft.Build.Sql/sdk/Sdk.targets
@@ -53,6 +53,9 @@
+
+
@@ -70,6 +73,8 @@
+
+
diff --git a/test/Microsoft.Build.Sql.Tests/BuildTests.cs b/test/Microsoft.Build.Sql.Tests/BuildTests.cs
index b20f123..9b3eb47 100644
--- a/test/Microsoft.Build.Sql.Tests/BuildTests.cs
+++ b/test/Microsoft.Build.Sql.Tests/BuildTests.cs
@@ -56,6 +56,66 @@ public void SuccessfulBuildWithPostDeployScript()
this.VerifyDacPackage(expectPostDeployScript: true);
}
+ [Test]
+ [Description("Verifies build with deployment extension configuration script.")]
+ public void SuccessfulBuildWithDeploymentExtensionConfigurationScript()
+ {
+ this.RemoveBuildFiles("Table2.sql");
+ this.AddDeploymentExtensionConfigurationScripts("Table2.sql");
+
+ string stdOutput, stdError;
+ int exitCode = this.RunDotnetCommandOnProject("build", out stdOutput, out stdError);
+
+ // Verify success
+ Assert.AreEqual(0, exitCode, "Build failed with error " + stdError);
+ Assert.AreEqual(string.Empty, stdError);
+ this.VerifyDacPackage();
+
+ // Verify the Table2 is not part of the model
+ using (TSqlModel model = new TSqlModel(this.GetDacpacPath()))
+ {
+ var tables = model.GetObjects(DacQueryScopes.UserDefined, ModelSchema.Table);
+ Assert.IsTrue(tables.Any(), "Expected at least 1 table in the model.");
+ foreach (var table in tables)
+ {
+ if (table.Name.ToString().IndexOf("Table2", StringComparison.OrdinalIgnoreCase) >= 0)
+ {
+ Assert.Fail("Table2 should have been excluded from the model.");
+ }
+ }
+ }
+ }
+
+ [Test]
+ [Description("Verifies build with build extension configuration script.")]
+ public void SuccessfulBuildWithBuildExtensionConfigurationScript()
+ {
+ this.RemoveBuildFiles("Table2.sql");
+ this.AddBuildExtensionConfigurationScripts("Table2.sql");
+
+ string stdOutput, stdError;
+ int exitCode = this.RunDotnetCommandOnProject("build", out stdOutput, out stdError);
+
+ // Verify success
+ Assert.AreEqual(0, exitCode, "Build failed with error " + stdError);
+ Assert.AreEqual(string.Empty, stdError);
+ this.VerifyDacPackage();
+
+ // Verify the Table2 is not part of the model
+ using (TSqlModel model = new TSqlModel(this.GetDacpacPath()))
+ {
+ var tables = model.GetObjects(DacQueryScopes.UserDefined, ModelSchema.Table);
+ Assert.IsTrue(tables.Any(), "Expected at least 1 table in the model.");
+ foreach (var table in tables)
+ {
+ if (table.Name.ToString().IndexOf("Table2", StringComparison.OrdinalIgnoreCase) >= 0)
+ {
+ Assert.Fail("Table2 should have been excluded from the model.");
+ }
+ }
+ }
+ }
+
[Test]
[Description("Verifies build with excluding file from project.")]
public void BuildWithExclude()
diff --git a/test/Microsoft.Build.Sql.Tests/DotnetTestBase.cs b/test/Microsoft.Build.Sql.Tests/DotnetTestBase.cs
index 7af9b19..e077a72 100644
--- a/test/Microsoft.Build.Sql.Tests/DotnetTestBase.cs
+++ b/test/Microsoft.Build.Sql.Tests/DotnetTestBase.cs
@@ -250,6 +250,22 @@ protected void AddPostDeployScripts(params string[] files)
ProjectUtils.AddItemGroup(this.GetProjectFilePath(), "PostDeploy", files);
}
+ ///
+ /// Add deploymentextensionconfiguration scripts to the project. paths are relative.
+ ///
+ protected void AddDeploymentExtensionConfigurationScripts(params string[] files)
+ {
+ ProjectUtils.AddItemGroup(this.GetProjectFilePath(), "DeploymentExtensionConfiguration", files);
+ }
+
+ ///
+ /// Add buildextensionconfiguration scripts to the project. paths are relative.
+ ///
+ protected void AddBuildExtensionConfigurationScripts(params string[] files)
+ {
+ ProjectUtils.AddItemGroup(this.GetProjectFilePath(), "BuildExtensionConfiguration", files);
+ }
+
///
/// Add scripts to the project that are not part of build. paths are relative.
///
diff --git a/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithBuildExtensionConfigurationScript/Table1.sql b/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithBuildExtensionConfigurationScript/Table1.sql
new file mode 100644
index 0000000..c4cde37
--- /dev/null
+++ b/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithBuildExtensionConfigurationScript/Table1.sql
@@ -0,0 +1,5 @@
+CREATE TABLE [dbo].[Table1]
+(
+ c1 int NOT NULL PRIMARY KEY,
+ c2 int NULL
+)
\ No newline at end of file
diff --git a/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithBuildExtensionConfigurationScript/Table2.sql b/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithBuildExtensionConfigurationScript/Table2.sql
new file mode 100644
index 0000000..7927950
--- /dev/null
+++ b/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithBuildExtensionConfigurationScript/Table2.sql
@@ -0,0 +1,6 @@
+-- This file to be excluded from project by the test
+CREATE TABLE [dbo].[Table2]
+(
+ c1 int NOT NULL PRIMARY KEY,
+ c2 int NULL
+)
\ No newline at end of file
diff --git a/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithDeploymentExtensionConfigurationScript/Table1.sql b/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithDeploymentExtensionConfigurationScript/Table1.sql
new file mode 100644
index 0000000..c4cde37
--- /dev/null
+++ b/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithDeploymentExtensionConfigurationScript/Table1.sql
@@ -0,0 +1,5 @@
+CREATE TABLE [dbo].[Table1]
+(
+ c1 int NOT NULL PRIMARY KEY,
+ c2 int NULL
+)
\ No newline at end of file
diff --git a/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithDeploymentExtensionConfigurationScript/Table2.sql b/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithDeploymentExtensionConfigurationScript/Table2.sql
new file mode 100644
index 0000000..7927950
--- /dev/null
+++ b/test/Microsoft.Build.Sql.Tests/TestData/SuccessfulBuildWithDeploymentExtensionConfigurationScript/Table2.sql
@@ -0,0 +1,6 @@
+-- This file to be excluded from project by the test
+CREATE TABLE [dbo].[Table2]
+(
+ c1 int NOT NULL PRIMARY KEY,
+ c2 int NULL
+)
\ No newline at end of file