MonoTouch:自定义msbuild任务错误

时间:2012-02-27 11:12:07

标签: c# msbuild xamarin.ios xbuild

我正在尝试创建自定义任务以生成中间.csproj文件(请参阅this帖子。)

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

启用MonoDevelop的实验性msbuild / xbuild 设置以强制MonoDevelop使用xbuild构建项目。

我可以通过一个通过<UsingTask>元素引用任务的项目从命令行运行它:

    ~/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)

但是,MonoTouch项目中的相同代码将失败:

    Error initializing task GenerateMdToolProject: Cannot cast from 
    source type to destination type.
    Task "GenerateMdToolProject" execution -- FAILED

问题:

  1. 我发现this old post表示问题已在Mono 2.8中修复。 MonoTouch也是如此吗?
  2. 我可以使用.net 3.5功能(特别是System.Xml.Linq)编写自定义任务吗?

2 个答案:

答案 0 :(得分:0)

MonoDevelop不使用xbuild来构建MonoTouch项目,而是使用自定义代码,它只能理解MSBuild项目文件所需的内容。

这意味着您添加到项目中的任何特殊MSBuild逻辑都将无法检测到。

有计划在未来改变,但尚未决定(也没有时间表)。

答案 1 :(得分:0)

  

我发现这个旧帖子表明问题已在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)不是您使用的(smcs编译器除外)执行MonoDevelop或(在您的情况下)xbuild(Mono的msbuild兼容)工具

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

  

我可以使用.net 3.5功能(特别是System.Xml.Linq)编写自定义任务吗?

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