C# MonoTouch:自定义msbuild任务错误

C# MonoTouch:自定义msbuild任务错误,c#,msbuild,xamarin.ios,xbuild,C#,Msbuild,Xamarin.ios,Xbuild,我正在尝试创建一个自定义任务来生成一个中间的.csproj文件(有关原因,请参阅文章) 自定义任务位于当前引用.net 2.0程序集的dll中 MonoDevelop的实验性msbuild/xbuild设置已启用,以强制MonoDevelop使用xbuild生成项目 我可以通过一个项目从命令行运行此命令,该项目通过元素引用任务: ~/src/All/workspace/XBuildExt/bin/Debug> mono /Library/Frameworks/Mono.framework

我正在尝试创建一个自定义任务来生成一个中间的.csproj文件(有关原因,请参阅文章)

自定义任务位于当前引用.net 2.0程序集的dll中

MonoDevelop的实验性msbuild/xbuild设置已启用,以强制MonoDevelop使用xbuild生成项目

我可以通过一个项目从命令行运行此命令,该项目通过
元素引用任务:

~/src/All/workspace/XBuildExt/bin/Debug> mono /Library/Frameworks/Mono.framework/Versions/Current/lib/mono/3.5/xbuild.exe ../../XBuildExtTest.targets XBuild Engine Version 2.10.8.0 Mono, Version 2.10.8.0 Copyright (C) Marek Sieradzki 2005-2008, Novell 2008-2011. Build started 2/27/2012 4:26:15 PM. __________________________________________________ Project "/Users/bright/src/All/workspace/XBuildExt/XBuildExtTest.targets" (default target(s)): Target Build: It works! Done building project "/Users/bright/src/All/workspace/XBuildExt/XBuildExtTest.targets". Build succeeded. 0 Warning(s) 0 Error(s) ~/src/All/workspace/XBuildExt/bin/Debug>mono /Library/Frameworks/Mono.framework/Versions/Current/lib/Mono/3.5/xbuild.exe ../../XBuildExtTest.targets XBuild引擎版本2.10.8.0 Mono,版本2.10.8.0 版权所有(C)Marek Sieradzki 2005-2008,Novell 2008-2011。 建造开始于2012年2月27日下午4:26:15。 __________________________________________________ 项目“/Users/bright/src/All/workspace/XBuildExt/XBuildExtTest.targets” (默认目标): 目标构建: 它起作用了! 完成建筑工程 “/Users/bright/src/All/workspace/XBuildExt/XBuildExtTest.targets”。 构建成功。 0个警告 0个错误 但是,MonoTouch项目中的相同代码在以下情况下失败:

Error initializing task GenerateMdToolProject: Cannot cast from source type to destination type. Task "GenerateMdToolProject" execution -- FAILED 初始化任务GenerateMdToolProject时出错:无法从 从源类型到目标类型。 任务“GenerateMdToolProject”执行--失败 问题:

  • 我发现这表明问题已在Mono 2.8中修复。MonoTouch也是这样吗
  • 我可以使用.NET3.5功能(特别是System.Xml.Linq)来编码自定义任务吗

  • MonoDevelop不使用xbuild来构建MonoTouch项目,而是使用自定义代码,该代码只理解尽可能多的MSBuild项目文件

    这意味着您添加到项目中的任何特殊MSBuild逻辑都不会被检测到

    有计划在未来改变这一点,但还没有决定(也没有时间表)

    我发现了这篇旧帖子,它表明问题在Mono 2.8中得到了解决

    你误解了那篇文章。它说这是在2010年9月初的MonoDevelop(而非Mono)中确定的。因此,MonoDevelop的最新版本,如2.8.x,将具有您提到的修复

    关于Mono 2.8的说明是关于另一个要求(原始帖子的问题),即具有支持.NET 4.0的运行时。只有在使用Mono 2.8(或更高版本)的情况下,才能使用此功能。为MonoTouch开发需要Mono 2.10+,因此这对您来说不是问题

    MonoTouch也是这样吗

    这不适用于MonoTouch本身。产品内部使用的Mono版本(无论如何基于2.10)不是您用来执行MonoDevelop或(在您的情况下)xbuild(Mono的msbuild兼容)工具的(smcs编译器除外)

    IWO MonoTouch中包含的Mono部件旨在用于模拟器或设备,而不是用于构建或执行工具

    我可以使用.NET3.5功能(特别是System.Xml.Linq)来编码自定义任务吗


    对。一旦有了.NET 4.0运行时,您就可以(通过GAC)访问较新的程序集,包括
    System.Xml.Linq
    ,以运行msbuild任务(只要路径和环境变量设置正确,如果可以运行MonoDevelop的话,它们很可能是正确的)。

    我正在使用上面提到的实验性msbuild设置,所以你的答案不适用。这篇文章(以及它在第一段中引用的文章)的真正原因是使用msbuild和自定义任务创建一个工作构建。此外,上面的错误清楚地表明特殊逻辑没有被检测到。我们已经工作了好几天,在完成这项工作方面取得了许多成功的进展,所以请不要使用样板答案。此时,我们对monotouch构建代码的了解已经深入到膝盖了。