visual-studio-2017 - Visual Studio 2017 代码分析器单元测试无法从外部程序集中加载自定义属性
问题描述
在 Visual Studio 2017 下,使用带有代码修复模板的 Analyzer 创建扩展。对于代码分析器单元测试代码,它无法解析外部 DLL 中的自定义属性。它显示 ErrorTypeNameSpace.MyCustomAttribute
为attr.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”被正确解析。但是DataSynchronizationContract
and DataSynchronizationMember
(在外部 DLL 中定义)被解析为 ErrorTypeattr.AttributeClass
这是我得到的错误:
((Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol)attr.AttributeClass).DefaultMarshallingCharSet' 引发了类型为“System.InvalidOperationException”的异常
解决方案
推荐阅读
- azure - 无法通过 -var-file 传递 azurerm_subnet 资源组
- python - My model has high accuracy and val_accuracy but giving wrong result on test data
- java - 如何知道springboot中奇怪连接的起源?
- dji-sdk - DJI OSDK 和 OSDK-ROS 3.7 和 3.8 bug demo_flight_control 起飞和停止
- python - 这是一个格式正确的嵌套字典,还是别的什么?
- javascript - 如何解决此问题以向用户添加命令中提到的角色?
- php - 显示带有变化的 WooCommerce 购物车
- coq - 如何使用重写策略指定位置?
- kubernetes - Kops 的 Kubelet PKI 管理
- java - 无法解析导入的 servletUriComponentsBuilder