Имя не может начинаться с «?»символ, шестнадцатеричное значение 0x3F - PullRequest
0 голосов
/ 11 июня 2019

Я обновляю некоторые старые решения, и лишь немногие проекты столкнулись со следующей ошибкой после автоматической миграции и перечислены в отчете о миграции

Имя не может начинаться с '?' символ, шестнадцатеричное значение 0x3F. Линия 1, позиция 3.

Я немного исследую Интернет, но не могу найти результат, которым является персонаж?

Я проверил

Имя не может начинаться с символа '', шестнадцатеричное значение 0x20
Имя не может начинаться с символа «$», шестнадцатеричное значение 0x24

Но решения, похоже, не соответствуют моему случаю.

Я заглядываю в csproj и делаю xml действительным онлайн-инструментом, все вроде нормально.

Похоже, что неудачные проекты являются либо сайтом ASP.NET, либо веб-службой SOAP.

Содержимое в одном из csproj

<?xml version="1.0" encoding="utf-8"?>
<VisualStudioProject>
  <CSHARP ProjectType="Web" ProductVersion="7.10.3077" SchemaVersion="2.0" ProjectGuid="{9CCCD8A9-8CEF-4FFF-80C6-8123FC554342}" SccProjectName="SAK" SccLocalPath="SAK" SccAuxPath="SAK" SccProvider="SAK">
    <Build>
      <Settings ApplicationIcon="" AssemblyKeyContainerName="" AssemblyName="PortalHome" AssemblyOriginatorKeyFile="" DefaultClientScript="JScript" DefaultHTMLPageLayout="Grid" DefaultTargetSchema="IE50" DelaySign="false" OutputType="Library" PreBuildEvent="" PostBuildEvent="" RootNamespace="PortalHome" RunPostBuildEvent="OnBuildSuccess" StartupObject="">
        <Config Name="Debug" AllowUnsafeBlocks="false" BaseAddress="285212672" CheckForOverflowUnderflow="false" ConfigurationOverrideFile="" DefineConstants="DEBUG;TRACE" DocumentationFile="" DebugSymbols="true" FileAlignment="4096" IncrementalBuild="false" NoStdLib="false" NoWarn="" Optimize="false" OutputPath="bin\" RegisterForComInterop="false" RemoveIntegerChecks="false" TreatWarningsAsErrors="false" WarningLevel="4" />
        <Config Name="Release" AllowUnsafeBlocks="false" BaseAddress="285212672" CheckForOverflowUnderflow="false" ConfigurationOverrideFile="" DefineConstants="TRACE" DocumentationFile="" DebugSymbols="false" FileAlignment="4096" IncrementalBuild="false" NoStdLib="false" NoWarn="" Optimize="true" OutputPath="bin\" RegisterForComInterop="false" RemoveIntegerChecks="false" TreatWarningsAsErrors="false" WarningLevel="4" />
      </Settings>
      <References>
        <Reference Name="System" AssemblyName="System" HintPath="..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.dll" />
        <Reference Name="System.Drawing" AssemblyName="System.Drawing" HintPath="..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Drawing.dll" />
        <Reference Name="System.Data" AssemblyName="System.Data" HintPath="..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Data.dll" />
        <Reference Name="System.Web" AssemblyName="System.Web" HintPath="..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Web.dll" />
        <Reference Name="System.XML" AssemblyName="System.Xml" HintPath="..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.XML.dll" />
        <Reference Name="System.Web.Mobile" AssemblyName="System.Web.Mobile" HintPath="..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Web.Mobile.dll" />
      </References>
    </Build>
    <Files>
      <Include>
        <File RelPath="AssemblyInfo.cs" BuildAction="Compile" />
        <File RelPath="Default.aspx" BuildAction="Content" />
        <File RelPath="Default.aspx.cs" DependentUpon="Default.aspx" SubType="ASPXCodeBehind" BuildAction="Compile" />
        <File RelPath="Global.asax" SubType="Component" BuildAction="Content" />
        <File RelPath="Global.asax.cs" DependentUpon="Global.asax" SubType="Code" BuildAction="Compile" />
        <File RelPath="Global.asax.resx" DependentUpon="Global.asax.cs" BuildAction="EmbeddedResource" />
        <File RelPath="Web.config" BuildAction="Content" />
      </Include>
    </Files>
  </CSHARP>
</VisualStudioProject>

Я думаю, что нашел ключ.

Когда я дважды щелкаю по csproj, он создает файл tmp, такой как vs2D44.tmp. Какой формат XML и содержит

<??>
<VisualStudioProject>
    <CSHARP
        ProductVersion = "7.10.3077"
        SchemaVersion = "2.0"
something ...

По-моему, откуда на самом деле сообщение об ошибке. Но, тем не менее, не знаю, почему или как это решить.

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Вы говорите, что у вас есть файл, который "имеет формат XML и содержит <??>" .

Ну, это противоречие. Если он содержит <??>, значит, он не в формате XML.

Когда вы получаете файл, содержащий сломанный XML, вы должны сделать то же самое, что и при покупке набора битых стекол: вернуть их поставщику и попросить обмен или возмещение. Если вы не можете этого сделать, вам придется найти свой собственный способ устранения ущерба. Существуют инструменты, которые могут вам помочь, такие как TagSoup, но по своей природе они не будут обрабатывать все возможные способы нарушения правил XML.

0 голосов
/ 11 июня 2019

попробуйте сделать CheckCharacters = false в XmlReaderSettings. Смотрите ниже, например, -

using System.Xml;
XDocument doc = null
XmlReaderSettings settings = new XmlReaderSettings { CheckCharacters = false };
using (XmlReader reader = //xml) { doc = XDocument.Load(reader); }

Затем продолжите чтение XML.

Это должно остановить XML Reader, чтобы проверить, есть ли в данном XML символы, которые являются «недопустимыми», и, если это так, выдает исключение. Это верно по умолчанию.

Более подробную информацию о юридических лицах, стандартах и ​​другую информацию можно найти здесь - https://docs.microsoft.com/en-us/dotnet/api/system.xml.xmlreadersettings.checkcharacters?view=netframework-4.8

...