预构建MSBuild任务以更新AssemblyInfo与内置exe不同步

我在Visual Studio 2008中使用调用msbuild的预构建任务:

C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe $(MSBuildProjectDirectory)\version.targets /p:Configuration=$(ConfigurationName) 

在version.targets中,我正在更新AssemblyInfo.cs文件以替换版本信息:

   

当我通过Visual Studio 2008构建项目时,它构建没有任何问题。

但是,当我查看生成的exe的版本信息时,它包含上一个时间戳,即使AssemblyInfo.cs已使用“正确”更改。

似乎主编译任务没有看到预编译的变化,它总是落后。

我做错了什么想法?

我不认为你做错了什么 – 这是一个错误。

我在这里报告了 – 检查你是否可以重现它并添加validation,也许我们可以通过MS修复它。

编辑:我尝试了“Si”的建议更新“BeforeBuild”事件中的文件 – 但是我仍然得到与Visual Studio 2008 / SP1相同的错误结果。

更新/解决方法 :MS已回复错误报告。 作为一种解决方法,您可以添加

 FALSE 

到您的csproj文件。

虽然接受的解决方案和链接文章都没有指定该行应该添加到.csproj文件中的第一个 元素 ,但FALSE技巧的+1。

这也是Visual Studio的一个问题,因为在同一个.csproj文件中从命令行调用msbuild (没有技巧)会立即看到生成的代码文件(而不是以前的版本)。

此外,我想建议将此主题标记为以下内容,因为我必须挖掘很多才能找到它:

  1. 视觉工作室
  2. 编译器
  3. BeforeBuild
  4. 产生
  5. 。净
  6. C#

有意思的是,我编写了自己的自定义任务,它被挂在了BeforeBuild中,这很好用。 从未通过命令行从VS或MSBuild出现问题。 所以我想先探讨一下BeforeBuild ……

我知道因为我们使用构建服务器(CruiseControl.NET)构建号作为版本的“构建”部分,它构建在所有程序集中(我们在解决方案中的程序集中为AssemblyVersion和AssemblyFileVersion共享相同的AssemblyInfo.cs)和然后将其(通过FileUpdate任务)推送到我们的WiX项目中的变量,并用于标记MSI文件名。

       

如果你做一些谷歌搜索你应该找到其他的例子…抱歉我不能给你UpdateVersion代码,我需要我的工作许可,但如果你在网上找不到合适的东西,自定义任务很容易写,以上应该有所帮助。

使用下面的内容更改任何文件的任何内容。 每次我创建一个构建时,我在hallo.aspx中更改构建日期值。


例如Hallo.aspx的内容

12-23.2011