visual-studio-2012 - 如何在 sqlproj (SQL Server 2012) 脚本中使用 msbuild 属性

标签 visual-studio-2012 sql-server-2012 sql-server-data-tools

我刚刚将现有的 SQL Server 2008 r2 .dbproj 升级到 SQL Server 2012 .sqlproj(使用 SQL Server Data Tools)。

以前,我能够在我的项目中定义一个 SQLCMD 变量,然后通过添加以下元素来编辑项目文件以使用 msbuild 值来定义该值:

<ItemGroup>
    <SqlCommandVariableOverride Include="ProjectDirectory=$(MSBuildProjectDirectory)" />
</ItemGroup>

然后我可以在我的 PostDeployment 脚本中使用它,如下所示:
SELECT * INTO dbo.MyTable FROM dbo.MyTable WHERE 1=2
BULK INSERT dbo.MyTable
FROM  '$(ProjectDirectory)\data\dbo.MyTable.dat'
WITH (DATAFILETYPE = 'widenative')

但是,升级后,这似乎不再起作用。

我尝试将相同的条目添加到新的 sqlproj,但发布功能似乎没有选择它并希望我提供一个值。如果我供应$(MSBuildProjectDirectory) ,按字面解释并失败。

在新制度下,指定本地文件路径和/或使用 msbuild 值的机制是什么?

最佳答案

在 sql server 2012 sqlproj(SSDT 数据库项目)中,您使用发布配置文件。您可以通过右键单击您的数据库项目并选择“发布”来开始。

然后,您可以设置所需的选项并将这些选项保存在项目中所谓的发布配置文件中。双击此配置文件启动带有正确选项集的发布向导。

在您的发布配置文件中,您可以包含 sqlcmd 变量的硬编码值:

<ItemGroup>
    <SqlCmdVariable Include="ProjectDirectory">
        <Value>UNKNOWN</Value>
    </SqlCmdVariable>
</ItemGroup>

如果需要,您可以在构建期间使用动态值更新这些。在您的 msbuild 项目中:
<Target Name="SetProjectDirectoryInPublishXml">
    <ItemGroup>
        <Namespaces Include="nsMsbuild">
            <Prefix>nsMsbuild</Prefix>
            <Uri>http://schemas.microsoft.com/developer/msbuild/2003</Uri>
        </Namespaces>
    </ItemGroup>
    <ItemGroup>
        <SSDTPublishFiles Include="$(SolutionBinFolder)\**\*.publish.xml" />
    </ItemGroup>
    <MSBuild.ExtensionPack.Xml.XmlFile Condition="%(SSDTPublishFiles.Identity) != ''"
                                   TaskAction="UpdateElement"
                                   File="%(SSDTPublishFiles.Identity)"
                                   Namespaces="@(Namespaces)" 
                                   XPath="//nsMsbuild:SqlCmdVariable[@Include='ProjectDirectory']/nsMsbuild:Value" 
                                   InnerText="$(MSBuildProjectDirectory)"/>
</Target>

这需要扩展来更新 XML。我使用 msbuild 扩展包。

此机制的积分转到 Jamie Thomson

关于visual-studio-2012 - 如何在 sqlproj (SQL Server 2012) 脚本中使用 msbuild 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11346977/

相关文章:

linux - 如何在 linux docker 容器中构建需要 SSDT 的 .sqlproj?

sql-server - 发布配置文件中的 Visual Studio 数据库项目目标平台

C# ToolStrip 插入标准菜单标准图标位置

c# - 如何在 visual studio 2012 中获取 AngularJS 的智能感知

php - 在TFS中 checkin 时检索文件的MD5

SQL Coldfusion - 搜索重复名称时消除单词 THE

c - 处理功能

sql - 创建从上一个索引增加的列

sql-server-2012 - SQL Server 2012 FileTable- 是存储在数据库中的文件吗?

sql - 安装 SSDT (SQL Server Data Tools) 时出错