我正在尝试创建自定义任务以生成中间.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
问题:
答案 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)。