Класс XMLSerializer, генерирующий исключение «массив не должен быть пустым» при компиляции в Visual Studio 2017 и. NET 3.5 - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть старый код, написанный с использованием VS2008, который я перевел на VS2017. Код использовал. NET 2.0 Если я собираю его с использованием VS2017 и. NET 2.0, я получаю «Массив не может быть нулевым». в конструкторе XMLSerializer Если я использую VS2015 и. NET 2.0, код работает. С VS2017 это работает только если я переключаюсь на. NET 4.0 или выше. В VS2015 он работает со всеми версиями. NET.

Стек исключений выглядит следующим образом:

at System.Reflection.Assembly.nLoadImage(...
at System.Reflection.Assembly.Load(...
at Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch(...
at Microsoft.CSharp.CSharpCodeGenerator.FromSourceBatch(...
at Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromSourceBatch(...
at System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromSource(...
at System.Xml.Serialization.Compiler.Compile(...
at System.Xml.Serialization.TempAssembly.GenerateAssembly(...at System.Xml.Serialization.TempAssembly..ctor(...
at System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(...
at System.Xml.Serialization.XmlSerializer..ctor(Type type, String defaultNamespace)
at System.Xml.Serialization.XmlSerializer..ctor(Type type)
at XMLSerializerTestVS2017.Form1.button1_Click(....

Мне удалось воспроизвести проблему всего несколькими строками code.

Exception pops up on the line 

XmlSerializer serializer = new XmlSerializer(typeof(MyData));

И я определил класс MyData следующим образом (только для тестирования)

[XmlRoot(ElementName = "root")]
public class MyData
{
    [XmlElement(ElementName = "MY_XML_A_ENTITY")]
    public string A { get; set; }
    [XmlAttribute(AttributeName = "xml_b_attrtibute")]
    public string B { get; set; }
    [XmlElement(ElementName = "MY_XML_C_ENTITY")]
    public int C { get; set; }
}

Кто-нибудь знает, что может быть причиной такого поведения. Код компилируется без проблем. Почему VS2017 с. NET 3.5 или старше не работает на этом простом примере? Я также пытался переключить VS2017 для использования C# версии 3.0 для компиляции, но это не имело никакого значения. VS2015 и старше (я пробовал их в 2013, 2010 и 2008 годах) отлично работают с любой. NET версией.

Любой ввод более чем приветствуется! Спасибо!

ЗАМЕЧАНИЕ: Я не уверен, что это правильный способ справиться с этим, я не хотел отвечать на свой вопрос, потому что другие пришли с идеями, объясняющими возможную причину. для моей проблемы, поэтому я, хотя было бы неуместно брать кредит за ответ. Кажется, что-то не так с моей машиной (спасибо Джек!). Тестирование кода, созданного с использованием VS2017 и .NET2.0 или 3.5, работало очень хорошо на бесплатной VMWare sh. Так что я думаю, что на моей машине что-то не так, что вызывает проблемы. Я до сих пор не знаю, что именно, но если я узнаю, я отправлю здесь. Спасибо всем за помощь!

ЗАМЕЧАНИЕ № 2 Кажется, это не только мой компьютер. Несмотря на то, что скомпилированный тестовый код работал в бесплатной VMWare sh, исключение снова показывалось, когда я запускаю тестовый код на машине, принадлежащей коллеге-разработчику. В настоящее время я склонен полагать, что проблема связана с VS2017.

ЗАМЕЧАНИЕ № 3 Я провел еще несколько тестов на других машинах на нашем сайте. Я пробовал машины без Visual Studio 2017. На этих машинах появилась ошибка. Я не уверен, что из этого следует сделать, но кажется, что сочетание компиляции с Visual Studio 2017 и запуска на машинах со всеми обновлениями Microsoft на нем как-то создает описанную проблему.

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