【问题标题】:Modify .csproj in pre-build event在预构建事件中修改 .csproj
【发布时间】:2013-07-18 14:37:46
【问题描述】:

tl;dr:如何在使用ClickOnce 发布期间修改.csproj 文件,同时执行预构建事件?

长: 我正在使用 Microsoft 托管的 TFS 对我的解决方案进行版本控制。

当使用ClickOnce 发布时,我得到最新的修订号 + 1 没有问题。我还可以成功地将新版本号写入我的构建过程之外的.csproj 文件中。

问题是,.csproj 文件在构建过程中没有得到更新 - 它可能处于写锁定状态。我在 Notepad++ 中收到有关文件修改的通知,但文件仍然包含旧版本,VS 没有注意到任何更改。

目前我找到解决此问题的唯一解决方案: 将修订更新移动到构建后事件中,并将 2 而不是 1 添加到实际修订号。不幸的是,当其他开发人员签入代码时,这将导致修订号过时。

【问题讨论】:

  • 即时更新项目文件是个坏主意,您最好创建一个目标文件,在正确的阶段更新变量的值。如果您想尝试现在正在做的事情,请关闭 msbuild 的托管。 blog.jessehouwing.nl/2012/06/…
  • @jessehouwing 我同意你的想法。但是不会是任何阶段——无论我把它放在哪里——都会导致 .csproj 文件发生变化? MsBuild 读取 csproj 文件的版本号,而不是从例如使用 ClickOnce 发布时的 AssemblyInfo.cs。

标签: visual-studio-2012 tfs clickonce csproj pre-build-event


【解决方案1】:

好吧,就这样吧... :(.

经过更多差异化处理后,您需要覆盖 GenerateApplicationManifest 目标以使其正常工作。该目标不使用*DependsUpon 属性组,因此更难覆盖。整个流程在Microsoft.Common.Targets 文件中定义,您可以在%windir%\Microsoft.NET\Framework{cpu}\{version} folder 中找到该文件。

另见:

【讨论】:

  • 在您的设置中使用最后一部分:<ApplicationVersion>1.1.0.$(ApplicationRevision) 会导致错误输出。输出是 0.0.2.246 而不是 1.1.0.254
  • 经过更多的区分后,您需要覆盖GenerateApplicationManifest 目标才能使其正常工作。该目标不使用“*DependsUpon”属性组,因此更难覆盖。整个流程在 Microsoft.Common.Targets 文件中定义,您可以在 %windir%\Microsoft.NET\Framework{cpu}\{version} 文件夹中找到该文件。
  • 哇...我快速扫描了Microsoft.Common.Targets 文件。修改它似乎是一项艰巨的任务。由于行为不正常,我将无法发布不在 TFS 上运行的应用程序。我认为修改构建过程以在构建过程中通过任务获取 TFS 修订是一个坏主意。如果发布过程“失败”,如果发布的版本过时并迫使开发人员再次发布它,该怎么办?
  • 您不必修改文件,只需在稍后导入的文件中(或在 .csproj 的底部)重新声明目标。最新的获胜。
猜你喜欢
  • 1970-01-01
  • 2015-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 2023-04-05
相关资源
最近更新 更多