Ken*_*ill 7 sql-server-2012 visual-studio-2012 sql-server-data-tools
我刚刚将现有的SQL Server 2008 r2 .dbproj升级到SQL Server 2012 .sqlproj(使用SQL Server数据工具).
以前,我能够在我的项目中定义一个SQLCMD变量,然后通过编辑项目文件来定义值,以通过添加以下元素来使用msbuild值:
<ItemGroup>
<SqlCommandVariableOverride Include="ProjectDirectory=$(MSBuildProjectDirectory)" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
然后,我可以在我的PostDeployment脚本中使用,如下所示:
SELECT * INTO dbo.MyTable FROM dbo.MyTable WHERE 1=2
BULK INSERT dbo.MyTable
FROM '$(ProjectDirectory)\data\dbo.MyTable.dat'
WITH (DATAFILETYPE = 'widenative')
Run Code Online (Sandbox Code Playgroud)
但是,升级后,这似乎不再起作用.
我已经尝试将相同的条目添加到新的sqlproj,但发布功能似乎没有提取它并希望我提供一个值.如果我提供$(MSBuildProjectDirectory),那就是按字面解释并失败.
在新制度下,指定本地文件路径和/或使用msbuild值的机制是什么?
小智 3
在 sql server 2012 sqlproj(SSDT 数据库项目)中,您使用发布配置文件。您可以通过右键单击数据库项目并选择“发布”开始。
然后,您可以设置所需的选项并将其保存在项目中所谓的发布配置文件中。双击此配置文件将启动带有正确选项集的发布向导。
在您的发布配置文件中,您可以包含 sqlcmd 变量的硬编码值:
<ItemGroup>
<SqlCmdVariable Include="ProjectDirectory">
<Value>UNKNOWN</Value>
</SqlCmdVariable>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以在构建期间使用动态值更新它们。在您的 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>
Run Code Online (Sandbox Code Playgroud)
这需要扩展来更新 XML。我使用 msbuild 扩展包。
该机制归功于杰米·汤姆森 (Jamie Thomson)
| 归档时间: |
|
| 查看次数: |
2495 次 |
| 最近记录: |