В Visual Studio 2017 создание расширения с помощью Analyzer с шаблоном исправления кода.Для кода тестового модуля анализатора кода он не может анализировать пользовательский атрибут во внешней DLL.Он показывает ErrorType NameSpace.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
и DataSynchronizationMember
(определенные во внешней DLL) анализируются как ErrorType для attr.AttributeClass
Это ошибка, которую я получаю:
((Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol) attr.AttributeClass) .DefaultMarshallingCharSet 'вызвала исключение типа' System.InvalidOperationException