NetStandard 1.4 не позволяет украшать класс с помощью [DataContract].

Когда я пытаюсь украсить класс [DataContract] в проекте .NETStandard 1.4

[DataContract]
[KnownType(typeof(SingleSensorEvent))]
[KnownType(typeof(BatchSensorEvent))]
public abstract class WebItemBase
{
    // details left out
}

Я получаю следующую ошибку компиляции

1>WebItemBase.cs(7,6,7,18): ошибка CS0653: невозможно применить класс атрибута «DataContract», поскольку он является абстрактным

1>WebItemBase.cs(8,6,8,15): ошибка CS0012: тип «Атрибут» определен в сборке, на которую нет ссылок. Вы должны добавить ссылку на сборку «mscorlib, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089».

Есть ли способ использовать контракты данных в NETStandard 1.4?


person bas    schedule 13.05.2017    source источник
comment
Вы сделали что-то, чего не должны были делать, чтобы получить такие ошибки. Что бы это ни было, всегда лучше не заставлять нас гадать, обязательно отменить это снова. Вместо этого вам нужно добавить ссылку на пакет Nuget, System.Runtime.Serialization v4.3.0. Остерегайтесь того, что ваш проект теперь может быть портирован не на каждую платформу, которую вы имели в виду, YMMV.   -  person Hans Passant    schedule 13.05.2017
comment
@HansPassant перемещает классы в новый проект и добавляет предложенный вами пакет nuget. Мое время вышло, поэтому я копну немного глубже позже. Наверное, я что-то сломал в проекте. Большое спасибо за ваши указатели! Если вы сбросите это как ответ, я приму его.   -  person bas    schedule 13.05.2017
comment
@HansPassant, учитывая, что я пытаюсь использовать тип X (любой нормальный тип .NET, который также будет доступен в .NET Standard), можете ли вы сказать мне надежный способ выяснить, какой .NET Standard минимум версия, на которую мне нужно ориентироваться, чтобы использовать ее, а также на какой пакет nuget добавить ссылку? Мне было очень сложно разобраться в этой части .NET Standard при работе с моими собственными библиотеками классов, но я также почти уверен, что не знаю, где искать.   -  person Lasse V. Karlsen    schedule 13.05.2017
comment
@LasseVKarlsen использует docs.microsoft.com/en-us/ dotnet/api/?view=netstandard-2.0 имя пакета Nuget — это имя сборки, в которой находится класс   -  person Scott Chamberlain    schedule 13.05.2017


Ответы (1)


Вам потребуется добавить ссылку на пакет System.Runtime.Serialization.Primitives NuGet, чтобы использовать DataContractAttribute. Он будет доступен автоматически в netstandard2.0:

dotnet add package System.Runtime.Serialization.Primitives
person Martin Ullrich    schedule 13.05.2017