我在Visual Studio 2008中使用预构建任务来调用msbuild:
C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe $(MSBuildProjectDirectory)\version.targets /p:Configuration=$(ConfigurationName)
在version.targets中,我正在更新AssemblyInfo.cs文件以替换版本信息:
<FileUpdate
Encoding="ASCII"
Files="$(MSBuildProjectDirectory)\Properties\AssemblyInfo.cs"
Regex="AssemblyInformationalVersion\(".*"\)\]"
ReplacementText="AssemblyInformationalVersion("Product $(ConfigurationString) ($(buildDate))")]"
/>
当我通过Visual Studio 2008构建项目时,它构建没有任何问题。
但是,当我查看生成的exe的版本信息时,它包含上一个时间戳,即使AssemblyInfo.cs已使用“正确”更改。
似乎主编译任务没有看到预编译的变化,它总是落后于其中。
我做错了什么想法?
答案 0 :(得分:25)
我不认为你做错了什么 - 这是一个错误。
我已将其报告here - 检查您是否可以重现并添加验证,也许我们可以通过MS修复它。
编辑:我尝试了“Si”的建议来更新“BeforeBuild”事件中的文件 - 但是我仍然得到与Visual Studio 2008 / SP1相同的错误结果。
更新/替代方法:MS已回复错误报告。作为解决方法,您可以添加
<UseHostCompilerIfAvailable>FALSE</UseHostCompilerIfAvailable>
到你的csproj文件。
答案 1 :(得分:14)
<UseHostCompilerIfAvailable>FALSE</UseHostCompilerIfAvailable>
元素中,但 +1代表<PropertyGroup>
技巧.csproj
文件
这也只是Visual Studio的一个问题,因为在同一个.csproj
文件上从命令行调用 msbuild (没有技巧)会看到生成的代码文件编译正确离开(而不是以前的版本)。
另外,我想建议将此主题标记为以下内容,因为我必须挖掘很多内容才能找到它:
答案 2 :(得分:2)
有趣的是,我编写了自己的自定义任务,它挂在了BeforeBuild中,这很好用。从未通过命令行从VS或MSBuild出现问题。所以我会说更多探索BeforeBuild ......
我知道,因为我们使用构建服务器(CruiseControl.NET)构建号作为版本的“构建”部分,它构建在所有程序集中(我们在程序集中共享AssemblyVersion和AssemblyFileVersion的AssemblyInfo.cs然后将其(通过FileUpdate任务)推送到我们的WiX项目中的变量,并用于标记MSI文件名。
<Target Name="BeforeBuild">
<CallTarget Targets="UpdateAssemblyInfo" />
</Target>
<Target Name="UpdateAssemblyInfo" Condition="'$(CIBuildNumber)' != ''">
<UpdateVersion Attribute="AssemblyFileVersion"
AssemblyInfo=".\Properties\AssemblyInfo.cs"
BuildNumber="$(CIBuildNumber)" />
</Target>
如果你进行谷歌搜索,你应该找到其他的例子......对不起,我不能给你UpdateVersion代码,我需要得到我工作的许可,但是如果你在网上找不到合适的东西,那就定制了任务很容易写,上面应该有所帮助。
答案 3 :(得分:0)
使用以下内容更改任何文件的内容。这里我每次创建构建时都会在hallo.aspx中更改构建日期值。
e.g。 Hallo.aspx内容
&LT;创建日期&GT; 12-23.2011&lt; / BuildDate&gt;
<!-- regular expression to get value between html node: "[^<>]+(?=[<])" -->
<FileUpdate Files="$(AboutDir)Hallo.aspx"
Regex="Builddate[^<>]+(?=[<])" ignoreCase="true"
ReplacementText="BuildDate: $(Day)-$(Month)-$(Year)" />