2015-01-04 69 views
0

我在使用Glass Mapper SitecoreService獲取項目時遇到問題。該項目肯定存在,類型是正確的。 (它由TDS生成)。Sitecore Glass Mapper:「程序集中的重複類型名稱」錯誤

var language = Language.Parse("en-GB"); 
var service = new SitecoreService("master");     
var targetPath = String.Format("{0}-migrated", Constants.SourceProviderListPageItem); 
var target = service.GetItem<IProvider_List_Page>(targetPath, language); 

上面代碼導致當service.GetItem <Ť>被稱爲以下例外。

Duplicate type name within an assembly. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ArgumentException: Duplicate type name within an assembly. 

[ArgumentException: Duplicate type name within an assembly.] 
System.Reflection.Emit.ModuleBuilder.CheckTypeNameConflict(String strTypeName, Type enclosingType) +14373369 
System.Reflection.Emit.AssemblyBuilderData.CheckTypeNameConflict(String strTypeName, TypeBuilder enclosingType) +91 
System.Reflection.Emit.TypeBuilder.Init(String fullname, TypeAttributes attr, Type parent, Type[] interfaces, ModuleBuilder module, PackingSize iPackingSize, Int32 iTypeSize, TypeBuilder enclosingType) +161 
System.Reflection.Emit.ModuleBuilder.DefineType(String name, TypeAttributes attr) +263 
Castle.DynamicProxy.Generators.Emitters.ClassEmitter..ctor(ModuleScope modulescope, String name, Type baseType, IEnumerable`1 interfaces, TypeAttributes flags, Boolean forceUnsigned) +156 
Castle.DynamicProxy.Generators.InvocationTypeGenerator.GetEmitter(ClassEmitter class, Type[] interfaces, INamingScope namingScope, MethodInfo methodInfo) +239 
Castle.DynamicProxy.Generators.InvocationTypeGenerator.Generate(ClassEmitter class, ProxyGenerationOptions options, INamingScope namingScope) +124 
Castle.DynamicProxy.Contributors.InterfaceProxyWithoutTargetContributor.GetInvocationType(MetaMethod method, ClassEmitter emitter, ProxyGenerationOptions options) +430 
Castle.DynamicProxy.Contributors.InterfaceProxyWithoutTargetContributor.GetMethodGenerator(MetaMethod method, ClassEmitter class, ProxyGenerationOptions options, OverrideMethodDelegate overrideMethod) +100 
Castle.DynamicProxy.Contributors.CompositeTypeContributor.ImplementMethod(MetaMethod method, ClassEmitter class, ProxyGenerationOptions options, OverrideMethodDelegate overrideMethod) +69 
Castle.DynamicProxy.Contributors.CompositeTypeContributor.ImplementProperty(ClassEmitter emitter, MetaProperty property, ProxyGenerationOptions options) +128 
Castle.DynamicProxy.Contributors.CompositeTypeContributor.Generate(ClassEmitter class, ProxyGenerationOptions options) +306 
Castle.DynamicProxy.Generators.InterfaceProxyWithoutTargetGenerator.GenerateType(String typeName, Type proxyTargetType, Type[] interfaces, INamingScope namingScope) +499 
Castle.DynamicProxy.Generators.<>c__DisplayClass1.<GenerateCode>b__0(String n, INamingScope s) +38 
Castle.DynamicProxy.Generators.BaseProxyGenerator.ObtainProxyType(CacheKey cacheKey, Func`3 factory) +757 
Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithoutTarget(Type interfaceToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options, IInterceptor[] interceptors) +159 
Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithoutTarget(Type interfaceToProxy, IInterceptor interceptor) +129 
Glass.Mapper.Pipelines.ObjectConstruction.Tasks.CreateInterface.CreateInterfaceTask.Execute(ObjectConstructionArgs args) +381 
Glass.Mapper.Pipelines.AbstractPipelineRunner`2.Run(T args) +616 
Glass.Mapper.AbstractService.InstantiateObject(AbstractTypeCreationContext abstractTypeCreationContext) +646 
Glass.Mapper.Sc.SitecoreService.CreateType(Type type, Item item, Boolean isLazy, Boolean inferType, Dictionary`2 parameters, Object[] constructorParameters) +721 
Glass.Mapper.Sc.SitecoreService.CreateType(Item item, Boolean isLazy, Boolean inferType) +215 
Glass.Mapper.Sc.SitecoreService.GetItem(String path, Language language, Boolean isLazy, Boolean inferType) +239 
<Redacted>.Page_Load(Object sender, EventArgs e) +584 
System.Web.UI.Control.LoadRecursive() +71 
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3178 

任何想法可能會導致問題?

乾杯

+0

你有完整的堆棧跟蹤嗎? –

+0

嗨邁克爾,感謝您的幫助 - 我已經按要求添加了堆棧跟蹤。 –

+1

看起來你正在使用[Interface as Model](http://glass.lu/Mapper/Sc/Tutorials/Tutorial21.aspx)。由於您使用的是TDS,因此也會生成具體的類,請嘗試使用「Provider_List_Page」。我的猜測是接口和具體的存在都在這裏引發問題,但@邁克爾愛德華茲將能夠確認... – jammykam

回答

1

如果您使用的使用從刺蝟T4 code generation templates然後將生成的C#類文件將包含兩個接口和具體類自動生成的類文件。

由於您使用的是從Sitecore獲取內容的界面,因此您實際上正在使用Interfaces as Models。我還沒有深入研究Glass Mapper,但我的猜測是Interface和Concrete的存在在這裏引發了一些問題。

相反,使用具體類:

var target = service.GetItem<Provider_List_Page>(targetPath, language); 

你可以,如果你需要與IProvider_List_Page更換var型。

相關問題