使用PostSharp编译时出错4.3.20

问题描述:

当我尝试从Visual Studio 2015内部进行编译时,出现以下错误跟踪。有没有其他人经历过这个?使用PostSharp编译时出错4.3.20

Error  Unhandled exception (4.3.20.0, postsharp-net40-x86-srv.exe, CLR 4.0.30319.394271, Release): System.NullReferenceException: Object reference not set to an instance of an object. 
    at PostSharp.Sdk.CodeModel.GenericMap.GetGenericParameter(GenericParameterKind kind, Int32 ordinal) 
    at PostSharp.Sdk.CodeModel.TypeSignatures.GenericParameterTypeSignature.MapGenericArguments(GenericMap genericMap) 
    at PostSharp.Sdk.CodeModel.MethodDefDeclaration.WriteReflectionName(StringBuilder stringBuilder, ReflectionNameOptions options, NameMapper mapper) 
    at PostSharp.Sdk.CodeModel.WriteReflectionNameExtensions.GetDisplayName(IWriteReflectionName declaration) 
    at PostSharp.Sdk.Extensibility.Licensing.LocalLicenseManager.^BLnBYDPkLE/l(MetadataDeclaration _0, TypeDefDeclaration _1, List`1 _2, List`1 _3, ^hjDNKkMra\+ry _4) 
    at PostSharp.Sdk.AspectWeaver.AspectWeaver.^Rb+2eJKK(MetadataDeclaration _0) 
    at PostSharp.Sdk.AspectWeaver.AspectWeaverInstance.ProvideAdviceTransformations(AspectWeaverTransformationAdder adder) 
    at PostSharp.Sdk.AspectWeaver.AspectWeaverTask.^5t5Tu4zL(AspectWeaverInstance _0) 
    at PostSharp.Sdk.AspectWeaver.AspectWeaverTask.^vPCloP06(IMetadataDeclaration _0, AspectWeaverInstance _1) 
    at PostSharp.Sdk.AspectInfrastructure.StructuredDeclarationDictionary`1.^lNgKC+Z4(IMetadataDeclaration _0, Func`3 _1) 
    at PostSharp.Sdk.AspectInfrastructure.StructuredDeclarationDictionary`1.^RdBVqi\.M.^8/pSq47Q(IMetadataDeclaration _0) 
    at PostSharp.Sdk.AspectInfrastructure.StructuredDeclarationDictionary`1.^d+wOzSPF(IMetadataDeclaration _0, Func`2 _1) 
    at PostSharp.Sdk.AspectInfrastructure.StructuredDeclarationDictionary`1.^+g+TCqVg(TypeDefDeclaration _0, Func`2 _1, Set`1 _2) 
    at PostSharp.Sdk.AspectInfrastructure.StructuredDeclarationDictionary`1.^fJqG(Func`2 _0) 
    at PostSharp.Sdk.AspectInfrastructure.StructuredDeclarationDictionary`1.^fJqG(Func`3 _0) 
    at PostSharp.Sdk.AspectWeaver.AspectWeaverTask.Execute() 
    at PostSharp.Sdk.Extensibility.Project.ExecutePhase(String phase) 
    at PostSharp.Sdk.Extensibility.Project.Execute() 
    at PostSharp.Hosting.PostSharpObject.ExecuteProjects() 
    at PostSharp.Hosting.PostSharpObject.InvokeProject(ProjectInvocation projectInvocation). 

编辑:在试图制造一个示例项目为了这个,我能事业隔离。我们有一个OnMethodBoundary方面(内部记录之一)应用于public static implicit operator T(Editable<T> item)类型。当我告诉PostSharp排除这种方法时,问题就消失了。

所以要重现它,请在使用Express许可证时将OnMethodBoundary应用于通用隐式运算符。

[ExceptionLoggerAspect] 
class Challenged<T> 
{ 
    public T Value { get; set; } 

    public static implicit operator T(Challenged<T> item) 
    { 
     return item.Value; 
    } 
} 
+0

您能否与我们分享重现该问题的项目?还是一个样例项目的行为方式相同? –

+0

@AntonínProcházka我添加了一种简单的复制方式。在找到这个时,我能够解决这个问题。 –

的变通最后我用是使用AttributeExclude =真在一般类型的隐式操作,这对我们是OnMethodBoundaryAspect上被多播。

[ErrorLoggingAspect(AttributeExclude = true)] 
public static implicit operator T(Editable<T> item) 
{ 
    ... 
} 
+1

在PostSharp 4.3.22中已修复此问题。 – AlexD