使用Microsoft.SharePoint.dll的Roslyn Autocomplete异常

时间:2014-05-07 14:32:33

标签: c# sharepoint reference roslyn

我正在使用旧版Roslyn为SharePoint编写带有自动完成功能的C#编辑器,因为它提供了脚本引擎。 为了获得完成项目,我使用与herehere相同的方法。

它工作正常,但当我添加对" Microsoft.SharePoint.dll"的引用时

private static readonly Type[] _assemblyTypes = new[]
{
 typeof (object), 
 typeof (Uri), 
 typeof (Enumerable),
 typeof (StringWriter),
 typeof (SPContext), //for 'Microsoft.SharePoint' autocomplete throws an exception
 typeof (ClientContext),       //for 'Microsoft.SharePoint.Client'
 typeof (ClientRuntimeContext) //and 'Microsoft.SharePoint.Client.Runtime' 
                               //autocomplete works without problem
};

我在尝试完成时遇到异常。 (在脚本引擎中,相同的引用执行正常,因此它正在加载)

  

' Roslyn.Compilers.MetadataReader.UnsupportedSignatureContent'

这是发生异常的完成方法:

public IList<CompletionItem> GetCompletion(int position)
    {
        var groups = _completionService.GetGroups(GetCurrentDocument(), position,
                                             CompletionTriggerInfo.CreateInvokeCompletionTriggerInfo(),
                                             _completionService.GetDefaultCompletionProviders(),
                                             CancellationToken.None);
        return (groups ?? Enumerable.Empty<CompletionItemGroup>()).SelectMany(t => t.Items).ToArray();
    }

执行此操作时更具体:

private MethodBase GetMethod(MethodBase method)
    {
        return _innerType.GetMethod(method.Name, method.GetParameters().Select(t => t.ParameterType).ToArray());
    }

这里是异常的完整堆栈跟踪:

  
      
  • 在   Roslyn.Compilers.CSharp.Metadata.PE.MetadataDecoder.GetCorElementTypeFromTypeSymbol(TypeSymbol type)
  •   
  • 在   Roslyn.Compilers.MetadataReader.MetadataDecoder`4.DecodeCustomAttributeNamedArgument(Int32 paramCount,MemoryReader&amp; ppArgs)
  •   
  • 在   Roslyn.Compilers.MetadataReader.MetadataDecoder 4.GetCustomAttribute(UInt32 customAttributeRid, CommonTypedConstant[]& positionalArgs, KeyValuePair 2 []&安培; namedArgs)
  •   
  • 在   Roslyn.Compilers.CSharp.Metadata.PE.PEAttributeData.get_CommonConstructorArguments()
  •   
  • 在   Roslyn.Services.Shared.Extensions.ISymbolExtensions.IsBrowsingProhibitedByTypeLibAttributeWorker(ISymbol symbol,ReadOnlyArray 1 attributes, List 1 attributeConstructors,Int32 hiddenFlag)
  •   
  • 在   Roslyn.Services.Shared.Extensions.ISymbolExtensions.IsEditorBrowsable(ISymbol symbol,Boolean hideAdvancedMembers,CommonCompilation compilation,IMethodSymbol editorBrowsableAttributeConstructor,List 1 typeLibTypeAttributeConstructors, List 1 typeLibFuncAttributeConstructors,List`1 typeLibVarAttributeConstructors)
  •   
  • 在   Roslyn.Services.Completion.CompletionExtensions。&lt;&gt; c__DisplayClass1`1.b__0(T s)
  •   
  • 在   System.Linq.Enumerable。&lt;&gt; c__DisplayClassf`1.b__e(TSource x)
  •   
  • 在   System.Linq.Enumerable。&lt;&gt; c__DisplayClassf`1.b__e(TSource x)
  •   
  • 在   System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
  •   
  • 在   System.Linq.Lookup 2.Create[TSource](IEnumerable 1个源,Func 2 keySelector, Func 2 elementSelector,IEqualityComparer`1 comparer)
  •   
  • 在   System.Linq.GroupedEnumerable`3.GetEnumerator()
  •   
  • 在   System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
  •   
  • 在   System.Collections.Generic.List 1..ctor(IEnumerable 1个集合)
  •   
  • 在   System.Linq.Enumerable.ToList [TSource](IEnumerable`1 source)
  •   
  • 在   Roslyn.Services.Implementation.Completion.CompletionProviders.AbstractSymbolCompletionProvider.CreateItems(IDocument document,Int32 position,IEnumerable 1 symbols, Nullable 1 contextOpt,CancellationToken cancellationToken)
  •   
  • 在   Roslyn.Services.CSharp.Completion.CompletionProviders.SymbolCompletionProvider.GetCompletionsForExpressionOrStatementContext(IDocument document,Int32 position,Boolean isDebugger,CancellationToken cancellationToken)
  •   
  • 在   Roslyn.Services.CSharp.Completion.CompletionProviders.SymbolCompletionProvider.GetItemsWorker(IDocument document,Int32 position,CompletionTriggerInfo triggerInfo,CancellationToken cancellationToken)
  •   
  • 在   Roslyn.Services.Implementation.Completion.CompletionProviders.AbstractCompletionProvider.GetGroup(IDocument document,Int32 position,CompletionTriggerInfo triggerInfo,CancellationToken cancellationToken)
  •   
  • 在   Roslyn.Services.Completion.CompletionService。&lt;&gt; c__DisplayClass13.b__1(ICompletionProvider p)
  •   
  • 在   System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()
  •   
  • 在   System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
  •   
  • 在   System.Collections.Generic.List 1..ctor(IEnumerable 1个集合)
  •   
  • 在   System.Linq.Enumerable.ToList [TSource](IEnumerable`1 source)
  •   
  • 在   Roslyn.Services.Completion.CompletionService.GetGroups(IDocument documentOpt,IText text,Int32 position,CompletionTriggerInfo triggerInfo,IEnumerable`1 completionProviders,CancellationToken cancellationToken)
  •   
  • 在   Roslyn.Services.Completion.CompletionService.GetGroups(IDocument文档,Int32位置,CompletionTriggerInfo triggerInfo,IEnumerable`1 completionProviders,CancellationToken cancellationToken)
  •   
  • ---从抛出异常的上一个位置开始的堆栈跟踪结束---
  •   
  • 在   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
  •   
  • 在   C_Sharp_Console.Utilities.ReflectionExtensions.Invoke [T](MethodBase方法,Object target,Object []参数)
  •   
  • 在   C_Sharp_Console.CompletionServiceWrapper.Invoke(MethodBase方法,Object []参数)
  •   
  • 在   C_Sharp_Console.CompletionServiceWrapper.GetGroups(IDocument文档,Int32位置,CompletionTriggerInfo triggerInfo,IEnumerable`1 completionProviders,CancellationToken cancellationToken)
  •   
  • 在   C_Sharp_Console.InteractiveManager.GetCompletion(Int32 position)
  •   
  • 在   CSharpConsole.CSConsole.GetAutocomplete(NameValueCollection request)
  •   

0 个答案:

没有答案