我正在使用旧版Roslyn为SharePoint编写带有自动完成功能的C#编辑器,因为它提供了脚本引擎。 为了获得完成项目,我使用与here或here相同的方法。
它工作正常,但当我添加对" 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个源,Func2 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)