C# MonoTouch:自定义msbuild任务错误
我正在尝试创建一个自定义任务来生成一个中间的.csproj文件(有关原因,请参阅文章) 自定义任务位于当前引用.net 2.0程序集的dll中 MonoDevelop的实验性msbuild/xbuild设置已启用,以强制MonoDevelop使用xbuild生成项目 我可以通过一个项目从命令行运行此命令,该项目通过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
元素引用任务:
~/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”执行--失败
问题:
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构建代码的了解已经深入到膝盖了。