首页 > 解决方案 > Visual Studio 2017 代码分析器单元测试无法从外部程序集中加载自定义属性

问题描述

在 Visual Studio 2017 下,使用带有代码修复模板的 Analyzer 创建扩展。对于代码分析器单元测试代码,它无法解析外部 DLL 中的自定义属性。它显示 ErrorTypeNameSpace.MyCustomAttributeattr.AttributeClass

外部 DLL 的目标是 dot.net 4.6。我通过添加 MetaReference

.AddMetadataReference(projectId, ExternalDllReference);

ExternalDLLReference 是通过加载的

MetadataReference.CreateFromFile(typeof(MyAttribute).Assembly.Location)

我还尝试通过固定位置手动加载程序集。结果相同。

单元测试 c# 代码非常简单。对于单元测试字符串中定义的自定义属性,它会正确加载。只是外部 DLL 中的属性未正确加载。

我尝试了类似的属性(在测试框架中定义的TestMethod),它具有相同的结果,所以它看起来不是我的自定义DLL 所独有的。

var test = @"
using System;
using MyCustom.Attributes;

namespace ConsoleApplication1
{ 
    public class Custom2Attribute : Attribute
    {
    }

    [Custom2]
    [DataSynchronizationContract(ClientSynchronizationMode.AllowClientChanges, DatabaseSynchronizationMode.Automatic)] 
    public class TestClass
    {   
        [DataSynchronizationMember]
        [Custom2]
        public string PatientID { get; set; } 

        [DataSynchronizationMember(Client = ClientSynchronizationMode.DenyClientChanges, Database = DatabaseSynchronizationMode.NotSynchronized)]
        public string OrderID { get; set; } 
    }
}";

“Custom2Attribute”被正确解析。但是DataSynchronizationContractand DataSynchronizationMember(在外部 DLL 中定义)被解析为 ErrorTypeattr.AttributeClass

这是我得到的错误:

((Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol)attr.AttributeClass).DefaultMarshallingCharSet' 引发了类型为“System.InvalidOperationException”的异常

标签: visual-studio-2017analyzerroslyn-code-analysis

解决方案


推荐阅读