我正在自定义一个.csproj
项目以在主构建之前运行一些自定义任务。但是,我无法使这些任务执行。
我取消注释了.csproj
文件中的<Target Name="BeforeBuild" />
元素,并添加了一个简单的Message任务,但是当我构建时,消息不会出现在输出中,因此似乎任务没有运行。所以这个片段不会输出消息;
清单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: 任务“Message”不支持“XXImportance”参数。请确认该参数在任务上存在,并且它是一个可设置的公共实例属性。
这表明正在解析 XML,已找到 Message
类,并且正在反射其中可用的属性。
为什么任务不会执行?
我正在使用 3.5 框架。
更新1: 在 @Martin 的建议下,我尝试在控制台上运行 MSBuild,并得到了以下错误:
c:\path\to\my.csproj(74,11): error MSB4019: 未找到导入的项目“C:\Microsoft.CSharp.targets”。请确认声明中的路径是否正确,并且该文件在磁盘上存在。
第74行如下所示:
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
更新2:我正在VS2008中编译,该IDE使用C#3编译器,但我要编译的项目是一个2.0框架项目。当从命令行运行时(参见更新1),构建似乎会失败,因为存在关于指定Microsoft.CSharp.targets
文件位置的混淆。