2

我有一个 Visual Studio 2008 解决方案,其中主要输出 exe 是一个 VB.Net Winforms exe,它有几个 VB.Net 和 C# dll 从同一个解决方案链接。整个解决方案都处于带有颠覆的版本控制之下。

现在我想用当前的 svn 版本号自动更新生成的文件。为此,我发现了这个简洁的项目:http : //svnversiontasks.codeplex.com/ 您还需要 MSBuild.Communuity.Tasks 才能工作。

有一个 msbuild 示例,说明如何更新我使用的解决方案中每个项目的 rev 号:

  <Import Project="$(MSBuildExtensionsPath)\SvnTools.Targets\SvnTools.Tasks.VersionManagement.Tasks" />
  <Target Name="build">
    <CreateItem Include="../**/AssemblyInfo.vb;../**/AssemblyInfo.cs;../**/Properties/AssemblyInfo.cs">
      <Output TaskParameter="Include" ItemName="AssemblyInfoFiles" />
    </CreateItem>
    <CreateItem Include="../**/*.vdproj;*.vdproj">
      <Output TaskParameter="Include" ItemName="DeploymentProjectFiles" />
    </CreateItem>
    <UpdateVersion AssemblyInfoFiles="@(AssemblyInfoFiles)" DeploymentProjectFiles="@(DeploymentProjectFiles)" Format="yyyy.mm.dd.rev" />
    <Exec Command="&quot;$(VS90COMNTOOLS)..\IDE\devenv&quot; ..\MyApp.sln /build" />
    <RevertVersionChange AssemblyInfoFiles="@(AssemblyInfoFiles)" DeploymentProjectFiles="@(DeploymentProjectFiles)" />
  </Target>

我修改了原始文件以包含 AssemblyInfo.vb 文件并将其保存为 msbuild.proj 文件。

但是,如果我从控制台执行 msbuild,我会看到 C# 项目已更新(我也可以从输出 dll 的属性中确认,但我的 vb 项目保持不变:

  Reverting version number change: ../App1\AssemblyInfo.vb
  Updating version number (to rev 0) for file: ../App1\AssemblyInfo.vb
D:\Source\MyApp\MyAppDeploy\MyAppDeploy.csproj : warning : Version attribute not found, file not updated.

  Reverting version number change: ../App2\Properties\AssemblyInfo.cs
  Updating version number (to rev 0) for file: ../App2\Properties\AssemblyInfo.cs
  Successfully updated file.

也许该任务不支持 VB.Net。但也许有人对此有解决方案......

4

1 回答 1

0

如果您查看 UpdateVersion 任务源代码,您应该会发现它使用正则表达式来解析 AssemblyInfo 文件,因此如果它不适用于 vb 文件也就不足为奇了。

你可以做你想做的事,只使用 MSBuild.Community.Tasks :

  • SvnVersion获取修订版(您也可以使用 SvnVersionTasks 中的 SvnGetProperty 任务)
  • AssemblyInfo生成具有正确版本的程序集信息。此任务处理 VB。
于 2010-05-03T11:48:05.470 回答