2012-07-05 3 views
7

Właśnie zaktualizowałem istniejący SQL Server 2008 r2 .dbproj do SQL Server 2012 .sqlproj (używając narzędzi danych SQL Server).jak korzystać z właściwości msbuild w skrypcie sqlproj (SQL Server 2012)

Wcześniej byłem w stanie zdefiniować zmienną Sqlcmd w moim projekcie, a następnie określić wartość poprzez edycję pliku projektu, aby użyć wartości msbuild dodając następujący element:

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

którym mógłbym następnie użyć w moim skrypcie PostDeployment:

SELECT * INTO dbo.MyTable FROM dbo.MyTable WHERE 1=2 
BULK INSERT dbo.MyTable 
FROM '$(ProjectDirectory)\data\dbo.MyTable.dat' 
WITH (DATAFILETYPE = 'widenative') 

Jednak po aktualizacji nie wydaje się już działać.

Próbowałem dodać ten sam wpis do nowego sqlproj, ale funkcja publikowania nie wydaje się go podnosić i chce, żebym podał wartość. Jeśli dostarczę $(MSBuildProjectDirectory), zostanie to zinterpretowane dosłownie i nie powiedzie się.

W ramach nowego systemu, jaki jest mechanizm określania lokalnego pliku ścieżki i/lub korzystania z wartości msbuild?

Odpowiedz

2

W serwerze sqlproj 2012 (projekt bazy danych SSDT) ​​korzystasz z profili publikowania. Możesz rozpocząć klikając prawym przyciskiem myszy projekt bazy danych i wybierając opcję "Publikuj".

Następnie można ustawić żądane opcje i zapisać je w tak zwanym profilu publikowania w projekcie. Dwukrotne kliknięcie tego profilu uruchamia kreatora publikowania z poprawnym zestawem opcji.

w twojej publikować profilu można dołączyć na stałe wartości dla zmiennych Sqlcmd:

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

W razie potrzeby, można zaktualizować je z wartościami dynamicznych podczas kompilacji. W twoim projekcie 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> 

Wymaga rozszerzenia do aktualizacji XML. Używam pakietu rozszerzenia msbuild.

Kredyty za ten mechanizm otrzymują: Jamie Thomson