【问题标题】:MS-Build BeforeBuild not firingMS-Build BeforeBuild 未触发
【发布时间】:2011-03-22 02:26:11
【问题描述】:

我正在自定义一个.csproj 项目以在主构建之前运行一些自定义任务。但是,我根本无法执行任务。

我取消了 .csproj 文件中的 <Target Name="BeforeBuild" /> 元素的注释并添加了一个简单的消息任务,但是当我构建时,消息没有出现在我的输出中,因此任务似乎没有运行。所以这个片段不输出消息;

清单 1:没有消息出现

<Target Name="BeforeBuild">
    <Message Text="About to build ORM layer" Importance="normal" />
</Target>

但是,如果我搞砸了某些属性,我可以让.csproj 根本无法执行;

清单 2:MSBuild 配置错误

<Target Name="BeforeBuild">
    <Message Text="About to build ORM layer" XXImportance="normal" />
</Target>

注意XXImportance 属性。我得到的构建错误是

My.csproj(83,46): error MSB4064: The "XXImportance" parameter is not supported by the "Message" task. Verify the parameter exists on the task, and it is a settable public instance property.

这表明正在解析 XML,已找到 Message 类,并且正在反映该类以获取可用属性。

为什么任务不执行?

我使用的是 3.5 框架。

更新 1: 在@Martin 的建议下,我尝试在控制台上运行 MSBuild,但出现此错误;

c:\path\to\my.csproj(74,11): error MSB4019: The imported
project "C:\Microsoft.CSharp.targets" was not found. Confirm
that the path in the <Import> declaration is correct, and that
the file exists on disk.

第 74 行读取;

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

更新 2: 我在 VS2008 中编译,它使用 C#3 编译器,但我正在编译的项目是框架 2.0 项目。从命令行运行时(参见更新 1),构建似乎失败了,因为对于 Microsoft.CSharp.targets 文件的指定位置存在混淆。

【问题讨论】:

    标签: c# msbuild csproj prebuild


    【解决方案1】:

    今天遇到了同样的问题,找到了解决方法。

    .csproj 文件中的 BeforeBuild 目标旨在重新定义 Microsoft.Common.targets 文件中定义(和引用)的目标,该文件由 Microsoft.CSharp.targets 文件导入,而该文件又是由您的 .csproj 导入。

    您的问题是 .csproj 中导入 Microsoft.CSharp.targets 的行在您定义 BeforeBuild 目标之后。将导入行移到 BeforeBuild 目标上方,一切正常。

    希望对你有帮助,

    【讨论】:

      【解决方案2】:

      事件正在触发,但您可能需要更改 VS 中的设置:

      工具->选项->项目和 解决方案->构建并运行:

      并将 MSBUild 详细程度设置为最小或正常。

      此外,如果您在控制台中通过 msbuild 进行编译,您将看到该消息,而无需更改上述设置。

      【讨论】:

      • 嗨,马丁。非常感谢您的回答 - 我很感激。我已经在最低限度的冗长,所以我不认为是那样。我尝试通过控制台进行编译,但出现错误——我已将其附加到原始帖子中。有什么想法吗?
      • 您是否使用了“开始”菜单->“所有程序”中的 Visual Studio 工具(Microsfot Vistual Studio 20xx 下)下的 Visual Stuido 命令提示符。它设置了一系列使 msbuild 工作的环境变量。
      • 另外,你可以试试。正常而不是最小
      • 这里详细比较了您在哪个详细级别获得的信息:docs.microsoft.com/en-us/visualstudio/msbuild/…
      • 它适用于 Microsoft Visual Studio Enterprise 2019 版本 16.8.5。当我将 MSBuild 项目构建输出详细程度从 Minimal 设置为 Normal 时,会执行 BeforeBuild 和 AfterBuild 目标。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多