0

我在 Visual Studio 2013 和 SSDT 中使用 TFS 来创建各种 SQL 数据库脚本。即,我正在通过 VS而不是SSMS 进行所有 SQL DB 开发。

我现在想要实现的是在构建/发布项目时根据此处发布的功能从外部文本文件生成/检索版本号:

http://www.codeproject.com/Articles/468855/Working-with-MSBuild-Part-2

所以我在MyProject.sqlprojxml 文件中添加了以下内容:

<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\(&quot;(\d+)\.(\d+)\.(\d+)\.(\d+)&quot;\)" ReplacementText="FileVersionAttribute(&quot;$(Major).$(Minor).$(Build).$(Revision)&quot;)" /> 
    <FileUpdate Files="@(Files)" Regex="FileVersion\(&quot;(\d+)\.(\d+)\.(\d+)\.(\d+)&quot;\)" ReplacementText=" FileVersion (&quot;$(Major).$(Minor).$(Build).$(Revision)&quot;)" /> 
    <FileUpdate Files="@(Files)" Regex="FileVersion\(&quot;(\d+)\.(\d+)\.(\d+)\.(\d+)&quot;\)" ReplacementText="FileVersion(&quot;$(Major).$(Minor).$(Build).$(Revision)&quot;)" /> 
</Target>

我有一个VersionInfo.txt文件位于: C:\Source Control\MISTP\Main\DB\SSMS\MyProject\Build

其中仅包含字符串:1.2.3.4

但是,当我在 VS 中构建和/或发布项目时,这似乎并没有真正做任何事情。我错过了什么?!

我是 MSBuild 的新手,但语法看起来是正确的 - 并且很大程度上来自 codeproject 文章 - 并且文件的路径是好的。

感觉好像 xml 没有被执行,但我假设它在 .sqlproj 文件中的存在将导致它被执行。

谢谢

4

1 回答 1

0

在构建期间不会触发目标。更新“SetVersion”目标如下:

<Target Name="SetVersion" DependsOnTargets="GetVersion" AfterTargets="PostBuildEvent"> 
于 2015-12-23T06:14:05.673 回答