Исключение TypeLoadException в проекте .NET Core при сериализации типа значения из ссылочного проекта .NET Framework - PullRequest
0 голосов
/ 04 июля 2019

У меня есть следующая структура зависимости проекта:

  • _visualizerTests.dotnetcore - .NET Core 2.2
    • Visualizer.2019 - .NET Framework 4.7.2

В проекте .NET Framework у меня определен следующий тип:

[Serializable]
public struct EndNodeData {
    public string Closure { get; set; }
    public string Name { get; set; }
    public string Type { get; set; }
    public string Value { get; set; }
}

Когда я пытаюсь сериализовать этот тип в проекте .NET Core:

var endnodeData = new EndNodeData {
    Closure = null,
    Name = null,
    Type = "int",
    Value = "5"
};
var stream = File.Create(Path.GetTempFileName());
var formatter = new BinaryFormatter();
formatter.Serialize(stream, endnodeData);

Я получаю следующее исключение:

System.TypeLoadException: 'Не удалось загрузить тип' System.Runtime.CompilerServices.IsReadOnlyAttribute 'из сборки' mscorlib, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089 '.' 1028 *

Типы классов, определенные в проекте .NET Framework, сериализуются без проблем, как и типы значений, определенные в проекте .NET Core.

Как я могу решить эту проблему?

(Это продолжение моего предыдущего вопроса .)

Удаление папок bin и obj и удаление папки решения .vs не помогают.

Я подал проблему в репозитории .NET Core .

1 Ответ

0 голосов
/ 04 июля 2019

Вероятно, это было исправлено в .NET Core 3, но до тех пор доступны следующие обходные пути:

  • Избегайте автоматически реализованных свойств; используйте полные свойства или открытые поля. (Чтобы подавить предупреждение компилятора, я использовал [SuppressMessage("", "IDE0032", Justification = "https://github.com/dotnet/core/issues/2981")] для этой цели.
  • Определите пользовательский System.Runtime.CompilerServices.IsReadOnlyAttribute в той же сборке или в некоторой общей сборке.

Отзыв о выпуске Roslyn

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...