默认情况下,在 .sqlproj 文件中有一个带有此类导入行的 Visual Studio SQL Server 数据库项目:
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion>
<!-- Default to the v11.0 targets path if the targets file for the current VS version is not found -->
<SSDTExists Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets')">True</SSDTExists>
<VisualStudioVersion Condition="'$(SSDTExists)' == ''">11.0</VisualStudioVersion>
</PropertyGroup>
<Import Condition="'$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
<Import Condition="'$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
尽管 VisualStudioVersion 11.0 没有包含 SSDT 的目录,但它可以从 Visual Studio 正确打开。但是,当尝试使用 Microsoft.Build 包从 .NET Core 应用程序加载项目时,会引发错误:
未找到导入的项目“D:\TestApp\TestApp\bin\Debug\netcoreapp3.1\Microsoft\VisualStudio\v11.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets”。确认导入声明“D:\TestApp\TestApp\bin\Debug\netcoreapp3.1\Microsoft\VisualStudio\v11.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets”中的表达式是正确的,并且该文件存在于磁盘上。
D:\Database1\Database1\Database1.sqlproj
项目加载的代码看起来像
var project = new Microsoft.Build.Evaluation.Project(@"D:\Database1\Database1\Database1.sqlproj");