2012-07-05 26 views
7

我剛剛將現有的SQL Server 2008 R2 .dbproj升級到SQL Server 2012 .sqlproj(使用SQL Server數據工具)。如何在sqlproj中使用msbuild屬性(SQL Server 2012)腳本

以前,我能夠在我的項目通過編輯項目文件中加入以下元素使用的MSBuild值來定義SQLCMD變量,然後定義值:

<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值的機制是什麼?

回答

2

在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

相關問題