gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:42:29 25 4
gpt4 key购买 nike

我刚刚将现有的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com