我正在尝试使用Monotouch在.Net中为iPhone创建一个项目。我的问题是:
我有一个由Visual Studio 2010生成的DLL。这个DLL只有一个接口和另外两个类。我可以在Visual Studio的项目中使用没有问题,但是当我尝试在Monotouch中使用相同的那个时,我遇到了这个错误:
构建:HelloWorld(Debug | iPhoneSimulator)
建筑解决方案HelloWorld
构建:HelloWorld(Debug | iPhoneSimulator)
执行主编译...
更新CodeBehind文件
更新了MainWindow.xib.designer.cs
/ Developer / MonoTouch / usr / bin / smcs / noconfig“/out:/Users/claudio/Documents/Development/DotNet/HelloWorld/HelloWorld/bin/iPhoneSimulator/Debug/HelloWorld.exe”“/ r:/ Developer / MonoTouch / usr / lib / mono / 2.1 / System.dll“”/ r:/Developer/MonoTouch/usr/lib/mono/2.1/System.Xml.dll“”/ r:/ Developer / MonoTouch / usr / lib / mono / 2.1 / System.Core.dll“”/ r:/Developer/MonoTouch/usr/lib/mono/2.1/monotouch.dll“”/ r:/Developer/MonoTouch/usr/lib/mono/2.1/System.Runtime。 Serialization.dll“”/ r:/Developer/MonoTouch/usr/lib/mono/2.1/System.ServiceModel.dll“”/ r:/Developer/MonoTouch/usr/lib/mono/2.1/System.ServiceModel.Web。 dll“”/ r:/Users/claudio/Documents/Development/DotNet/HelloWorld/HelloWorld/bin/Abcom.EmailService.ContractsCS.dll“/ nologo / warn:4 / debug:+ / debug:full / optimize- / codepage :utf8“/ define:DEBUG”/ t:exe“/Users /claudio / Files / Development / DotNet / HelloWorld / HelloWorld
“/Users/claudio/Documents/Development/DotNet/HelloWorld/HelloWorld/Main.cs""/Users/claudio/Documents/Development/DotNet/HelloWorld/HelloWorld/Class1.cs”
程序集中缺少方法.ctor /Users/claudio/Documents/Development/DotNet/HelloWorld/HelloWorld/bin/Abcom.EmailService.ContractsCS.dll,类型System.Runtime.Versioning.TargetFrameworkAttribute类System.Runtime.Versioning.TargetFrameworkAttribute不能加载,在Abcom.EmailService.ContractsCS中使用。无法找到自定义attr构造函数图像:/Users/claudio/Documents/Development/DotNet/HelloWorld/HelloWorld/bin/Abcom.EmailService.ContractsCS.dll mtoken:0x0a000001
未处理的异常:System.TypeLoadException:无法从程序集“Abcom.EmailService.ContractsCS”加载类型“System.Runtime.Versioning.TargetFrameworkAttribute”。
at(wrapper managed-to-native)System.Reflection.Assembly:InternalGetType(System.Reflection.Module,string,bool,bool)
在System.Reflection.Assembly.GetType(System.String name,Boolean throwOnError,Boolean ignoreCase)[0x00000] in:0
在System.Reflection.Assembly.GetType(System.String name)[0x00000] in:0
在Mono.CSharp.RootNamespace.GetTypeInAssembly(System.Reflection.Assembly assembly,System.String name)[0x00000] in:0
在Mono.CSharp.RootNamespace.LookupTypeReflection(Mono.CSharp.CompilerContext ctx,System.String name,Location loc,Boolean must_be_unique)[0x00000] in:0
在Mono.CSharp.GlobalRootNamespace.LookupTypeReflection(Mono.CSharp.CompilerContext ctx,System.String name,Location loc,Boolean must_be_unique)[0x00000] in:0
在Mono.CSharp.Namespace.LookupType(Mono.CSharp.CompilerContext ctx,System.String name,Location loc)[0x00000] in:0
在Mono.CSharp.Namespace.Lookup(Mono.CSharp.CompilerContext ctx,System.String name,Location loc)[0x00000] in:0
在Mono.CSharp.TypeManager.CoreLookupType(Mono.CSharp.CompilerContext ctx,System.String ns_name,System.String name,Kind type_kind,Boolean required)[0x00000] in:0
在Mono.CSharp.TypeManager.InitCoreTypes(Mono.CSharp.CompilerContext ctx)[0x00000] in:0
在Mono.CSharp.Driver.Compile()[0x00000]中:0
在Mono.CSharp.Driver.Main(System.String [] args)[0x00000] in:0
构建完成 - 1个错误,0个警告
----------------------完成----------------------
构建:1个错误,0个警告
有人知道这里发生了什么吗?
此致 克劳迪奥
答案 0 :(得分:5)
.NET有几个“配置文件”,配置文件由其锚定“mscorlib.dll”管理。从锚定mscorlib.dll,所有其余的程序集流动。您会注意到,您不应该在4.0系统上混合使用2.0 mscorlib编译的程序集,或者相反(它们可能工作,但它们不能保证工作)。
因此,通常,您需要使用相同的程序集编译代码。使用4.0 mscorlib时,使用4.0系列程序集;使用2.0,3.5和3.5sp1时,使用2.0 mscorlib;使用Silverlight时,使用Silverlight 2.1 mscorlib API集。
MonoTouch引入了自己的锚定mscorlib,版本为2.1.0.0(与Silverlight相同),从这个程序集开始,我们的API流程。
这就是为什么你需要使用Mono程序集为2.1.0.0配置文件重建库。
答案 1 :(得分:3)
您无法链接使用Visual Studio编译的DLL。您必须使用Monotouch重新编译DLL才能使用它。