gpt4 book ai didi

c# - MS-Build BeforeBuild 未触发

转载 作者:可可西里 更新时间:2023-11-01 08:01:48 24 4
gpt4 key购买 nike

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

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

list 1:没有消息出现

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

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

list 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已找到类,并且正在为可用属性反射(reflect)该类。

为什么任务不执行?

我使用的是 3.5 框架。

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

c:\path\to\my.csproj(74,11): error MSB4019: The importedproject "C:\Microsoft.CSharp.targets" was not found. Confirmthat the path in the declaration is correct, and thatthe file exists on disk.

第74行读取;

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

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

最佳答案

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

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

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

希望对你有帮助,

关于c# - MS-Build BeforeBuild 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3352228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com