我在 Visual Studio 2013 和 SSDT 中使用 TFS 来创建各种 SQL 数据库脚本。即,我正在通过 VS而不是SSMS 进行所有 SQL DB 开发。
我现在想要实现的是在构建/发布项目时根据此处发布的功能从外部文本文件生成/检索版本号:
http://www.codeproject.com/Articles/468855/Working-with-MSBuild-Part-2
所以我在MyProject.sqlproj
xml 文件中添加了以下内容:
<PropertyGroup>
<WorkingFolder>C:\Source Control\MISTP\Main\DB\SSMS\MyProject</WorkingFolder>
</PropertyGroup>
<Target Name="GetVersion">
<Message Text="GetVersion: Reading version number from VersionInfo.txt" />
<Attrib Files="$(WorkingFolder)\VersionInfo.txt" Normal="true" />
<Version VersionFile="$(WorkingFolder)\Build\VersionInfo.txt">
<Output TaskParameter="Major" PropertyName="Major" />
<Output TaskParameter="Minor" PropertyName="Minor" />
<Output TaskParameter="Build" PropertyName="Build" />
<Output TaskParameter="Revision" PropertyName="Revision" />
</Version>
<Message Text="GetVersion: $(Major).$(Minor).$(Build).$(Revision)" />
</Target>
<Target Name="SetVersion" DependsOnTargets="GetVersion">
<Message Text="SetVersionInfo: Updating Versions in all files" />
<CreateItem Include="$(WorkingFolder)\**\*.*">
<Output TaskParameter="Include" ItemName="Files"/>
</CreateItem>
<Attrib Files="@(Files)" Normal="true" />
<FileUpdate Files="@(Files)" Regex="FileVersionAttribute\("(\d+)\.(\d+)\.(\d+)\.(\d+)"\)" ReplacementText="FileVersionAttribute("$(Major).$(Minor).$(Build).$(Revision)")" />
<FileUpdate Files="@(Files)" Regex="FileVersion\("(\d+)\.(\d+)\.(\d+)\.(\d+)"\)" ReplacementText=" FileVersion ("$(Major).$(Minor).$(Build).$(Revision)")" />
<FileUpdate Files="@(Files)" Regex="FileVersion\("(\d+)\.(\d+)\.(\d+)\.(\d+)"\)" ReplacementText="FileVersion("$(Major).$(Minor).$(Build).$(Revision)")" />
</Target>
我有一个VersionInfo.txt
文件位于:
C:\Source Control\MISTP\Main\DB\SSMS\MyProject\Build
其中仅包含字符串:1.2.3.4
但是,当我在 VS 中构建和/或发布项目时,这似乎并没有真正做任何事情。我错过了什么?!
我是 MSBuild 的新手,但语法看起来是正确的 - 并且很大程度上来自 codeproject 文章 - 并且文件的路径是好的。
感觉好像 xml 没有被执行,但我假设它在 .sqlproj 文件中的存在将导致它被执行。
谢谢