【问题标题】:Forcing the build to fail if there is a .net version mismatch如果 .net 版本不匹配,则强制构建失败
【发布时间】:2011-10-28 04:27:29
【问题描述】:

我们有一些应用程序仍然必须是 2.0,因为它们将在没有安装 v3.5 框架的客户端机器上运行,我们希望确保没有代码被漏掉属于。我知道 3.5 框架包括 2.0 框架。也就是说,我们正在努力确保如果有人无意中将特定项目的目标版本从 2.0 更改为其他版本,我们的自动构建将失败。这不应该发生,但我们会格外小心。

我们认为可能会以某种方式在 .csproj 文件中使用 beforeBuild 和 TargetFrameworkVersion。如“如果 TargetFrameworkVersion 不是 2.0,则输出消息并使构建失败”。这是可能的/最好的方法吗?

【问题讨论】:

  • .NET 3.5 建立在 2.0 之上 - 它使用相同的运行时。您要解决什么问题?
  • 我将重新表述一下这个问题;当我被要求研究它时,这对我来说并不那么清楚。但是我们有 target 环境,不会安装 3.5,显然有人担心有人不会意识到给定项目需要保持 2.0,我们希望每晚/目标构建失败,如果它变了。

标签: c# msbuild build nant


【解决方案1】:

听起来您想将相关项目的“目标框架”更改为 .Net Framework 2.0。

来自 MSDN 文章“如果您更改 .NET Framework 版本,如果您的代码包含对不同版本的引用,您可能会收到错误消息。”

这里有很棒的 MSDN 演练:http://msdn.microsoft.com/en-us/library/bb398202.aspx

如果您想在构建服务器上强制执行 2.0 版,则修改 msbuild 选项以将工具集版本“覆盖”为 2.0。此命令开关优先于项目设置文件,并“导致所有项目及其项目到项目依赖项根据该 ToolsVersion 构建,即使解决方案中的每个项目都指定了自己的”。这是关于什么是工具集的 msdn:http://msdn.microsoft.com/en-us/library/bb383796(v=vs.90).aspx,这是关于如何指定命令行开关的 MSDN:http://msdn.microsoft.com/en-us/library/bb383985(v=vs.90).aspx

如果您使用 TFS 进行夜间构建,那么这里是添加参数的方法(我使用的是 VS 2010 Pro):

  1. 转到团队资源管理器并展开项目
  2. 右键单击构建项
  3. 选择新构建定义(或编辑现有构建定义)
  4. 转到进程
  5. 展开“代理设置”
  6. 查找 MsBuild 参数。
  7. 添加 /tv:2.0 并在您完成任何其他设置后保存构建更改。

现在,即使项目文件发生更改,构建服务器也会捕获 2.0 级别以上的代码并失败。如果您不使用 TFS 进行构建,请查看您的工具是否允许您修改 msbuild 命令行。

【讨论】:

  • 我知道该怎么做;我改变了问题,使我想要的更清楚。
  • 如果我正确理解您的说明,您希望 .NET 版本大于 2.0 的任何语言功能都不会进入构建,那么此解决方案将起作用。我添加了来自 MSDN 的引用“如果您更改 .NET Framework 版本,如果您的代码包含对不同版本的引用,您可能会收到错误消息”。我相信这意味着如果我在面向 .NET 2.0 的项目中使用 .NET 3.5 中的功能,那么我将收到一个错误。这是你的追求吗?
  • 我想我还是说得不够清楚。您说得对,我们不希望将 >2.0 的功能纳入构建中。例如,我们还希望防止开发人员进入并将目标框架更改为 v3.5,因为该应用程序将安装在仅安装了 2.0 框架的机器上。我们希望我们的自动化构建能够通知我们这种诡计。
  • 好的,我明白你的意思了。我在答案中添加了更多细节,以解决如何在构建服务器上捕获这种情况。
  • 感谢您的额外解释(抱歉我错过了)。我们没有使用 TFS 进行夜间构建(我很确定我们只是安排 Windows 任务来运行我们的 NANT 脚本,但我会与某人核实)。另外,我无法添加构建定义,所以我假设我需要与某人讨论权限问题。现在这听起来像是我想做的,但我还不能测试它。
猜你喜欢
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 2021-08-27
相关资源
最近更新 更多