C# MS Build BeforeBuild未启动

C# MS Build BeforeBuild未启动,c#,msbuild,csproj,prebuild,C#,Msbuild,Csproj,Prebuild,我正在自定义一个.csproj项目,以便在主构建之前运行一些自定义任务。但是,我根本无法执行这些任务 我在.csproj文件中取消了元素的注释,并添加了一个简单的消息任务,但是当我构建时,消息没有出现在我的输出中,因此任务似乎没有运行。所以这个片段不输出消息 清单1:没有消息出现 <Target Name="BeforeBuild"> <Message Text="About to build ORM layer" Importance="normal" /> &

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

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

清单1:没有消息出现

<Target Name="BeforeBuild">
    <Message Text="About to build ORM layer" Importance="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正在被解析,找到了
消息
类,并且该类正在为可用属性进行反射

为什么任务不能执行

我使用的是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.
c:\path\to\my.csproj(74,11):错误MSB4019:导入的
找不到项目“C:\Microsoft.CSharp.targets”。证实
声明中的路径是正确的
该文件存在于磁盘上。
第74行为:

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


更新2:我在使用C#3编译器的VS2008中编译,但我正在编译的项目是一个framework 2.0项目。从命令行运行时(请参阅更新1),生成似乎失败,因为在指定
Microsoft.CSharp.targets
文件的位置上存在混淆。

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

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

并将MSBUild详细信息设置为最小或正常


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

今天也遇到了同样的问题,并找到了使其正常工作的方法

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

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


希望有帮助,

嗨,马丁。非常感谢你的回答,我很感激。我已经说得很详细了,所以我不认为是这样。我试图通过控制台编译,但出现了一个错误——我已将其附加到原始帖子中。有什么想法吗?您是否使用了Visual Studio Tools(在Microsfot Vistual Studio 20xx下)中的开始菜单->所有程序中的Visual Stuido命令Pront。它设置了一系列使msbuild工作的环境变量。正常而不是最低限度这是详细的比较您在哪个详细级别获得的信息:它在Microsoft Visual Studio Enterprise 2019版本16.8.5中工作。当我将MSBuild项目生成输出详细度从最小设置为正常时,将执行BeforeBuild和AfterBuild目标。
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />