Ошибка компиляции CS0433 на предварительно скомпилированном ASP.NET 2,0 сайта

используйте эту структуру

struct YourStruct: Codable {
    let menuName: String
    let menuID: Int
    let menuGroups: [MenuGroup]

    enum CodingKeys: String, CodingKey {
        case menuName
        case menuID = "menuId"
        case menuGroups
    }
}

struct MenuGroup: Codable {
    let type, name: String
    let menuEntry: [MenuGroupMenuEntry]
}

struct MenuGroupMenuEntry: Codable {
    let type: String
    let name: String?
    let menuEntry: [MenuEntryMenuEntry]?
    let productName, productPrice: String?
}

struct MenuEntryMenuEntry: Codable {
    let type, productName, productPrice: String
}

и в datatask после проверки, что у вас нет ошибки

if let data = data {
                let decoder = JSONDecoder()
                guard let decodedJson = try? decoder.decode(YourStruct.self, from: data) else { completion(nil) ; return }

            }

надеюсь, что эта помощь

8
задан abatishchev 20 May 2010 в 22:49
поделиться

7 ответов

убийство экземпляров Cassini, как указано выше, у меня не сработало. ScottGu написал об этой проблеме

установка атрибута batch="false" в секции компиляции в web.config помогла мне.

<configuration>

   <system.web>
       <compilation debug="false" batch="false"></compilation>
   </system.web>

</configuration>

Это указывает ASP.NET на динамическую компилировать отдельные файлы .aspx/.ascx в отдельные сборки. Это позволяет избежать проблемы круговой ссылки, которая вызывает исключение.

7
ответ дан 5 December 2019 в 15:27
поделиться

в IIS необходимо перезапустить его путем открытия командной строки и ввода iisreset затем хит входит, однако если Ваше использование сборки в веб-сервере Visual Studio (Кассини) затем эта привычка решает Вашу проблему. Можно завершить все рабочие экземпляры Cassini путем ввода (точно как это потому что его Чувствительное к регистру): taskkill /f /im "WebDev.WebServer.exe" и удар входит. Вы будете затем видеть следующее сообщение: SUCCESS: The Process "WebDev.WebServer.EXE" with PID <some #> has been terminated.

1
ответ дан 5 December 2019 в 15:27
поделиться

Для меня, закрывая IDE, закрывая веб-сайт (IIS или Cassini), удаляя все мои временные файлы asp.net, запуская IDE и делая полную компиляцию добивается цели.

1
ответ дан 5 December 2019 в 15:27
поделиться

Причина МОГЛА БЫ состоять в том, что некоторый другой DLL, на который Вы ссылаетесь, мог бы ссылаться на более старую/более новую версию указанного блока. Таким образом, различные части приложения ссылаются на различные версии блока. Я столкнулся с проблемой как это также. Для разрешения его я вынудил приложение использовать новую версию:

Я изменил все свои ссылки в web.config для указания на более новую версию. В моем случае это была Система. Сеть. Блок расширений, который вызывал проблемы. Я изменил всех их с 1.0.60125.0 до 3.5.0.0

Затем, я добавил эти строки к своему web.config, который в основном говорит Вашему приложению "передавать" все ссылки на старую версию блока к новому:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="bin;sitefinity\admin\bin" />
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Telerik.Security" publicKeyToken="dfeaee0e3978ac79" />
        <bindingRedirect oldVersion="3.2.1598.2" newVersion="3.5.1747.2" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Telerik.Cms.Web.UI" publicKeyToken="dfeaee0e3978ac79" />
        <bindingRedirect oldVersion="3.2.1598.2" newVersion="3.5.1747.2" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Telerik.Web.UI" publicKeyToken="121fae78165ba3d4" />
        <bindingRedirect oldVersion="2008.1.515.20" newVersion="2008.2.1001.20" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

Я не предложил это решение, но нашел его где-нибудь, что я не могу помнить. Однако я не думаю, что когда-либо видел объяснение точно, почему это происходит также!

0
ответ дан 5 December 2019 в 15:27
поделиться

Исправить эту ошибку довольно просто, но для этого требуются некоторые редко используемые объявления (сложная часть - это копаться в правильной документации;).

См. ECMA-334 , Раздел, 16.3 « Директивы внешнего псевдонима »

Если вы управляете «своим» источником и связываете с другой сборкой «их» двоичный файл, вы не можете изменить (или сделать не хочу тоже менять :) спецификаторы пространства имен / типа (например, ОБА из вас объявляют Систему ). Я действительно сталкивался с этим в последнее время изрядно, со всеми обновлениями бета / альфа / версии для CLR / DLR, MS много перемешивала в своем опубликованном пространстве имен.

Когда вы импортируете сборку «их», обычно компилятор установит его в глобальное (зарезервированное) пространство имен. В MSVC вы переходите к свойствам в ссылке на сборку, переходите туда, где написано « Псевдонимы », затем вы можете указать новое имя, другое , кроме глобального. Или на самом деле несколько имен.

Допустим, вы используете образное имя « global2 ».

Затем вы переходите к своим исходным файлам и в TOP перед любые объявления пространств имен, которые вы размещаете;

extern alias global2;
using global2::System;

Затем ваш код может использовать типы из global2, такие как "Int32" или что-то еще, вы все равно можете переименовать его через;

extern alias global2;
using global2::System;
using orig = System;
0
ответ дан 5 December 2019 в 15:27
поделиться

У меня только что была эта проблема. Оказывается, я случайно перетаскивал файлы из одного проекта в другой, что создавало дубликат. Мне потребовалось некоторое время, чтобы найти проблему, потому что файлы были скрыты в папке «Свойства» (в которую я никогда не заглядываю).

В любом случае, что помогло мне решить проблему, так это попадание в файл, который выдавал ошибку , R-щелчок по ошибочной строке и "переход к определению". Находясь в определении, вы можете видеть, какой физический файл вы смотрите. Если это не то, что должно быть, значит, вы нашли свою проблему.

Я знаю, что это тривиально, но я потратил на это около часа времени, так что надеюсь, что эта информация будет полезна кому-нибудь.

0
ответ дан 5 December 2019 в 15:27
поделиться

btw, CodeBehind не устарел и не используется!

CodeBehind= для страниц в Web Application (с файлами .Designer.cs) и CodeFile= для страницы в Web Site (динамически скомпилированные сборки, поэтому без файлов .Designer.cs)

0
ответ дан 5 December 2019 в 15:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: