2012-02-27 25 views
0

我试图创建一个自定义任务生成中间的.csproj文件(见this职位的原因。)的MonoTouch:自定义MSBuild任务的错误

自定义任务是在目前引用的DLL。网2.0组件。

实验msbuild/xbuild启用MonoDevelop设置强制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)来编写自定义任务吗?

回答

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中包含的单声道部件应用于模拟器或设备,而不是用于构建或执行工具。

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

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

0

MonoDevelop不使用xbuild构建MonoTouch项目,而是自定义代码,它只理解MSBuild项目文件的必要性。

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

有计划在未来改变这种情况,但没有任何决定(也没有时间表)。

+0

我使用上述的实验性msbuild设置,因此您的答案不适用。这篇文章(以及它在第一段中引用的那篇文章)的原因是使用msbuild和一个自定义任务来创建一个工作版本。 – bright 2012-02-27 11:46:41

+0

另外,上面的错误清楚地表明特殊逻辑没有被检测到。我们一直在努力工作数天,并取得了很多成功的进展,因此请 - 没有样板的答案。在这一点上,我们在MonoTouch构建代码方面已经深入人心。 – bright 2012-02-27 11:50:10