Skip to content

Diagnostics es

Edgar Mesquita edited this page Oct 14, 2026 · 1 revision

Diagnósticos

🌐 Esta página en: English · Português · Español · Français · Deutsch

Todo error y advertencia de compilación que eqc puede imprimir, con lo que significa y qué hacer al respecto. Los códigos son estables: son lo que buscas, y lo que nombraría una supresión.

Esta página se genera desde la misma referencia que comprueba el repositorio: docs/DIAGNOSTICS.md, sujeta al compilador por DiagnosticsDocumentedTests. Un código que el compilador levante, o que levanten los propios targets de MSBuild del SDK, sin una fila aquí rompe la compilación, igual que una fila que nombre un código que ya no existe, y también un código que gane un nuevo lugar de reporte, lo cual no es una regla de estilo: EQ2101 fue una vez dos errores sin relación (un desajuste de traducción resx y System.IO en un componente de cliente), cada uno fijado por su propia prueba en verde, porque los dos nunca se encontraron en una compilación.

Los diagnósticos se imprimen en la forma canónica de MSBuild, así que el IDE y dotnet build los enlazan ambos:

Pages/Counter.cs(14,9): error EQ2002: C# 'goto' cannot be transpiled to JavaScript …

EQ0xxx: el host de compilación

El proceso eqc en sí, antes o alrededor de una compilación.

Código Significado Qué hacer
EQ0000 Un error de compilación llegó sin código propio. Lee el mensaje: falta el código, no el diagnóstico.
EQ0001 eqc se cayó. Un fallo en el compilador. El mensaje lleva la excepción; repórtalo con el código fuente que lo provocó. Un caso no es del compilador: los proyectos que la app referencia no pudieron leerse desde su fuente, porque la lista que el SDK escribió para la compilación no está o no tiene ningún proyecto, o un ensamblado o un proyecto que nombra no está. El mensaje nombra qué no se cumplió, y la compilación se detiene ahí, ya que seguir escribiría una página que nombra tipos que nada importa (Desde 0.2.0-preview.62). Compila de nuevo, y repórtalo si persiste.
EQ0002 La lista de referencias de MSBuild está vacía, así que el modelo semántico se construiría desde una compilación incompleta y los argumentos nombrados podrían emitirse en el orden equivocado. Recompila (dotnet build). Si persiste, CompileEQuanticUI corrió sin FindReferenceAssembliesForReferences.

EQ1xxx: todavía no existe traducción

Un hueco en el compilador, no en tu código. La construcción es C# legal y podría traducirse; hoy nada lo hace. Estos son los códigos que se encogen a medida que el compilador crece.

Código Significado Qué hacer
EQ1001 Una clase de expresión de C# no tiene estrategia de transpilación. Reescríbela en una forma transpilable, o añade una estrategia de conversión para la construcción.
EQ1002 Una clase de sentencia de C# no tiene estrategia de transpilación. Como arriba.
EQ1003 Un nodo de C# (ni expresión ni sentencia) no tiene estrategia. Como arriba.
EQ1004 Una estrategia coincidió con la construcción pero esta forma exacta no tiene emisión: la traducción sería silenciosamente incorrecta, así que se detiene. Reescribe la forma, o añade el caso que falta a la estrategia.
EQ1005 Dos tipos comparten un nombre de archivo gemelo: o el mismo nombre dos veces, o dos nombres que difieren solo en mayúsculas (un archivo en Windows y en macOS). Sus gemelos serían UN archivo y el segundo sobrescribiría al primero. Renombra uno de los tipos.
EQ1006 (advertencia) Un tipo está declarado en más de un lugar y eqc emite un módulo por declaración, así que el gemelo solo tiene los miembros de la primera declaración. Combínalas en una sola declaración, o mantén juntos en una los miembros que un componente usa juntos. Es inocuo cuando las otras mitades son solo de servidor, que es por lo que no detiene la compilación.
EQ1007 Un nombre de método declarado dos veces en un tipo: dos sobrecargas, o dos nombres que bajan a uno (Foo y foo). C# distingue las sobrecargas por sus parámetros, y una clase de JavaScript tiene un miembro por nombre, así que el gemelo se quedaría con una de ellas y toda llamada llegaría a esa: una clase, un record o una clase estática se quedó con la ÚLTIMA, un componente con la PRIMERA, todo en silencio. Un método estático y uno de instancia pueden compartir nombre, las dos mitades de un método parcial son un método, y una implementación explícita de interfaz toma el nombre de la interfaz, que ningún renombrado puede cambiar, así que la comprobación de sobrecargas la deja fuera; junto a un default de otra interfaz toma el nombre de su miembro como cualquier miembro, y se comprueba. Dos defaults que una clase toma de interfaces distintas, o un default y un miembro que la clase declara, aterrizan en un nombre del mismo modo, y lo mismo los mismos pares a lo largo de la cadena de clases: un miembro que una clase derivada declara con el nombre de un default que su base toma (salvo que implemente el miembro de interfaz de ese default, listando la clase la interfaz de nuevo), un default con el nombre de un miembro que una base declara, y dos defaults de miembros de interfaz distintos, uno tomado por una base y otro por la clase derivada. Un indexador toma dos nombres en su gemelo, item para su getter y setItem para su setter, así que un segundo indexador, o cualquier miembro que el gemelo tenga con esos nombres (un método, un campo, una propiedad, un evento, un parámetro de constructor primario que un miembro lee) aterriza en el mismo miembro, y el mensaje nombra qué renombrar. Una implementación explícita del indexador de una interfaz tiene item y setItem, a los que llega todo acceso por la interfaz, y el indexador propio del tipo junto a ella toma nombres propios; lo que un acceso por una interfaz no puede distinguir, dos implementaciones explícitas o una junto a un indexador o a un default que responde a otra interfaz, se rechaza. Los miembros de instancia de un record o de un struct que aterrizan en un nombre también se rechazan: su gemelo guarda el estado de cada instancia como propiedades propias y sus métodos y propiedades calculadas en su prototipo, así que dos de ellos compartían una ranura (struct S(int x) { public int X { get; } = x * 2; } respondía `6 6para3
EQ1008 Una clase se apoya en un miembro de interfaz por defecto de una interfaz compilada en un ensamblado referenciado fuera del SDK. JavaScript no tiene interfaces, así que eqc escribe cada default que una clase toma en su gemelo: convertido desde la fuente de la interfaz cuando la compilación la tiene, y delegado a la copia del runtime para las interfaces propias del SDK (IAppTheme, ICodeLanguage, ICodeCompletionProvider), las interfaces públicas de los ensamblados que el runtime provee. La interfaz de cualquier otro ensamblado no tiene ninguna de las dos, cualquiera sea el namespace que declare, así que el gemelo no tiene tal miembro y una llamada a él en el navegador encontraría undefined. Lo mismo para un default que usa un miembro estático de una interfaz, que no tiene forma de JavaScript que lo guarde. Declara el miembro en la clase, o mantén la clase fuera del código de cliente.
EQ1009 Un constructor de un record, de un struct o de una clase simple al que su gemelo no puede llegar (el de una clase simple Desde 0.2.0-preview.61). Una clase de JavaScript tiene un constructor, así que su gemelo toma una rama por constructor de C# según cuántos argumentos llegaron, contando sus parámetros opcionales: cada constructor que hace su propio trabajo (el primario, o uno explícito que no encadena con : this(…)) enlaza sus parámetros, fija los miembros, llama al constructor de su base y ejecuta su cuerpo, y cada uno que encadena ejecuta aquel al que encadena tras evaluar los argumentos de la cadena. Un constructor que toma un número de argumentos que otro también toma no puede distinguirse de él, y uno que encadena a un constructor que a su vez encadena, o : this() al constructor implícito de un struct junto a constructores propios, llega a su trabajo por nada. El constructor de copia de un record (protected R(R original)) no es una rama: new nunca llega a él (Desde 0.2.0-preview.61). Tampoco lo es el constructor que solo llaman las serializaciones de .NET, (SerializationInfo, StreamingContext), que la plantilla de excepción de Visual Studio escribe junto a (string, Exception): el navegador no tiene SerializationInfo, y una clase de excepción de la app es una clase cuyos constructores se comprueban como los de cualquier clase (Desde 0.2.0-preview.61). Una llamada de una que el navegador haría, un new, o la cláusula : base(…), : this(…) o de base de un constructor que el gemelo escribe, se rechaza, ya que sin rama para ella la llamada ejecutaría otro constructor de dos argumentos (new Snap(info, context) ejecutaba Snap(string, string)); la propia de la plantilla llama a la de su base, no es una rama, y no hace ninguna llamada (Desde 0.2.0-preview.61). Dale al constructor un número de argumentos propio, o encadénalo a uno que haga su propio trabajo. Una fábrica estática (static Coded FromText(string text) => new(text.Length)) dice lo mismo sin un segundo constructor. Construye un objeto cuyo constructor de serialización alcance una llamada a través de otro de sus constructores.

EQ2001–EQ2014: la construcción no puede cruzar

No es un hueco: no hay equivalente en el navegador, o una traducción tendría que ser una conjetura. Estos no se encogen con el trabajo del compilador: son la forma del destino.

Código Significado Qué hacer
EQ2001 Una construcción de C# sin equivalente en tiempo de ejecución en el navegador (intrínsecos de referencia tipada: __makeref, __reftype, __refvalue, stackalloc, punteros). Reestructura sin ella.
EQ2002 goto. Reestructura con bucles y condicionales, o con un break/continue etiquetado (esos SÍ se traducen).
EQ2003 new T() sobre un parámetro de tipo: los argumentos genéricos se borran en tiempo de ejecución en JavaScript, así que el tipo concreto es desconocido. Pasa una fábrica (Func<T>) o el valor ya construido.
EQ2004 Un miembro sin traducción a JavaScript: un método de extensión cuya clase declarante no es parte de esta compilación, o una llamada para la que el transpilador no mapea nada (Stopwatch.StartNew, Roslyn…) dentro de una clase que refleja, escrita cualificada o alcanzada a secas por using static (WriteLine bajo using static System.Console, desde 0.2.0-preview.60). También un valor System.Range almacenado en vez de usado para indexar, o entregado a un indexador que toma el propio Range (this[Range r], desde 0.2.0-preview.61). Usa un miembro de instancia o trae la fuente declarante; añade una estrategia; para un rango, indexa con él directamente (text[a..b]), o dale al tipo un Length (o un Count) y un Slice(int start, int length), que un rango llama; mueve la llamada detrás de un [ServerAction]; o, cuando la clase entera solo corre en el servidor, marca la CLASE [ServerOnly] y no se emite módulo para ella (0.2.0-preview.46).
EQ2005 Un iterador infinito. Los iteradores se MATERIALIZAN en un arreglo, así que el bucle correría para siempre en vez de producir perezosamente. Dale un fin al bucle (una cota, un yield break), o toma lo que necesitas dentro del método.
EQ2006 El miembro no se enlaza en el modelo semántico, así que cualquier traducción sería una conjetura. O el código no compila, o a eqc le faltan referencias o fuentes generadas. Nunca se conjetura: ver Compilador.
EQ2007 Un comparador que cambia lo que una colección considera igual o en orden: el argumento with(…) de una expresión de colección más allá de una pista de capacidad, o un comparador entregado al constructor de una colección (new Dictionary<string, T>(StringComparer.OrdinalIgnoreCase)) o a un operador de LINQ que encuentra sus claves o sus elementos por él (ToHashSet, y ToDictionary, ToLookup, GroupBy y Distinct desde 0.2.0-preview.61). Una lista, un conjunto o un diccionario encuentra un elemento por la igualdad por defecto de su tipo y no toma otra: los comparadores por defecto y StringComparer.Ordinal pasan. Una ordenación o una búsqueda binaria toma el comparador por defecto del tipo, un Comparison<T>, los seis de un StringComparer, Comparer<T>.Create y un comparador que escribas, y rechaza solo uno que ningún gemelo lleva (un StringComparer hecho para una cultura, un comparador que una biblioteca compiló). Quita el comparador, o normaliza las claves tú (pásalas a minúsculas a la entrada y en cada búsqueda). Para una ordenación, pasa un Comparison<T>.
EQ2008 Sintaxis de consulta usando join, let, un segundo from, o into: su traducción a C# pasa por identificadores transparentes generados por el compilador. También las formas de inicializador con cerca. Reescribe en sintaxis de método, donde todo operador está soportado.
EQ2009 Un componente está declarado más de una vez en un archivo (declaraciones parciales). eqc emite un módulo por declaración y no puede fusionarlas. Combina los miembros en una sola declaración.
EQ2010 Un símbolo que el framework mantiene en el HOST, un tipo o un único miembro marcado [ServerOnly], nombrado desde código de cliente. El runtime no entrega gemelo, así que la referencia compilaría, emitiría y fallaría en la hidratación con «does not provide an export named» mientras el SSR seguía respondiendo 200. Un método de extensión llamado sobre un valor que cruza nombra también su hogar: curve.Ease(t) es CurveEvaluator.Ease(curve, t), y fallaba en la llamada. Un tipo declarado dentro de uno que nunca cruza (una clase [ServerOnly] o un atributo) tampoco tiene gemelo, como su dueño no tiene ninguno, mientras que uno declarado dentro de una clase de excepción de la app cruza como esa clase, así que el código de cliente que llega a él se rechaza igual, como sea que llegue: su nombre, un alias, using static, un operador o una conversión que su valor trae, o un cero. Un módulo que importaría su gemelo lo reporta en la declaración que contiene la referencia (Desde 0.2.0-preview.61). Un miembro marcado [ServerOnly] se rechaza donde sea que el código de cliente lo nombre, incluido el código de su propio tipo: un componente deja tal método fuera de su gemelo, y su propio Build llamándolo era una llamada a un miembro que el gemelo no tiene (Desde 0.2.0-preview.62). Llámalo desde código de servidor: un [ServerAction], una clase [ServerOnly], o un realizador. Nunca desde el Build de un componente. A diferencia de EQ2004 esto es una DECISIÓN, no un hueco: añadir una estrategia no es la respuesta.
EQ2011 Un miembro que tomaría un nombre que el componente del runtime ya usa. C# mantiene aparte un parámetro de constructor primario, un campo y una propiedad, y los escribe distinto del camelCase del runtime; JavaScript lo pliega todo sobre this.<name>, así que la asignación reemplaza al miembro del runtime y la página falla solo en el navegador. La lista se lee del runtime vivo, nunca se escribe a mano. Renombra el miembro. Un override está exento: el Build de un componente está hecho para reemplazar el build del runtime, y reemplazar un miembro de la base es para lo que uno sirve, pero un método simple no lo está: public void Mount() { } no sobrescribe nada y aun así emite mount() sobre el propio del runtime, así que el componente nunca se monta.
EQ2012 Un [ServerAction] en un componente ABSTRACTO. El servidor registra una acción con el nombre del componente CONCRETO que la lleva, salta los tipos abstractos y recorre los métodos heredados, así que sirve Tile/Load mientras un stub emitido en la base invocaría CardBase/Load. Nada sirve ese id y la página recibe «action not found», en ambos lados en silencio. Declara la acción en el componente concreto. Un alias no es la respuesta: el descriptor lleva el TIPO de componente sobre el que invocar, así que dos hijos que heredan una acción le dan dos respuestas al id de la base; el dueño de una acción heredada es una decisión, no un parche.
EQ2013 Un tipo del vocabulario cuya mitad de navegador revive los valores de un argumento de tipo (ServerTopic<T>) se construye donde ese argumento es, o contiene, un parámetro de tipo, como en static ServerTopic<T> Topic<T>(string name) => new(name). JavaScript borra el tipo ahí, así que el topic no llevaría spec y toda carga llegaría a sus suscriptores sin revivir: un decimal o un long como el texto que escribe el cable, un record sin sus miembros. Construye el topic donde su tipo de carga es concreto, como miembro estático del tipo que declara los topics de la app: static ServerTopic<RoomEvent> Room(string id) => new($"room:{id}"). Ver Eventos de servidor.
EQ2014 Un tipo de excepción se construye o se prueba donde un argumento de tipo que lleva, el suyo o uno de un tipo en el que está anidado, es, o contiene, un parámetro de tipo, como en static Exception Of<T>() => new Failed<T>(), catch (Failed<T>), o new Missing() dentro de la clase genérica que lo declara. Una excepción lleva los tipos que es, que un catch tipado, un is y su nombre leen, y JavaScript borra un parámetro de tipo, así que la excepción llevaría, o la prueba compararía, T mismo: catch (Failed<int>) no atrapaba lo que Of<int>() lanzaba (Desde 0.2.0-preview.61). Construye y prueba una excepción donde sus argumentos de tipo son tipos concretos, y declara una clase de excepción fuera de un tipo genérico.

EQ2100–EQ2101: plantillas resx

El contrato de localización, comprobado en la máquina de compilación y no cuando llega un visitante.

Código Significado Qué hacer
EQ2100 Sobre esta llamada: la plantilla debe ser un formato compuesto válido cuyos especificadores estén dentro del subconjunto soportado, y la llamada debe pasar cada hueco que declara. Corrige el número de argumentos, o quita el especificador fuera del subconjunto (la alineación como {0,10} está fuera de v1).
EQ2101 Sobre las traducciones: el resx de cada cultura se sujeta al neutral, que es el contrato de aridad. Corrige la plantilla de la cultura: un {n} perdido o de más rompe la compilación, no la página.

EQ2102–EQ2107, EQ2112, EQ2114: la frontera cliente/servidor

Un componente de cliente buscó una API que solo existe en un servidor, o un valor que solo el servidor tiene. El puente es [ServerAction].

Código Significado
EQ2102 Acceso directo a base de datos (Microsoft.EntityFrameworkCore, System.Data).
EQ2103 Red (System.Net.Http, System.Net.Sockets).
EQ2104 Hilos y bloqueo del SO (Thread, Monitor, Mutex, Semaphore, no Task).
EQ2105 Lanzar procesos (System.Diagnostics.Process).
EQ2106 Interoperabilidad nativa / P-Invoke (System.Runtime.InteropServices).
EQ2107 Generación de IL en tiempo de ejecución (System.Reflection.Emit).
EQ2112 Acceso al sistema de archivos (System.IO).
EQ2114 Una página usa un valor que le dio el contenedor del servidor (un parámetro de constructor de un tipo de clase, o un miembro donde la página guarda uno) de un modo que la compilación no puede seguir: un método llamado sobre él, el valor pasado donde la compilación no tiene fuente, convertido a texto, comparado, enumerado, guardado en una colección, leído por un miembro que un tipo de .NET declara sobre un valor que no cruza entero (el Count de una lista o de un conjunto de objetos, el Value de un par), leído por un tipo cuyo miembro de ese nombre el propio tipo del valor oculta (new), o leído mientras la página se construye. Tal valor cruza al navegador solo como lo que el navegador lee de él, así que un uso que la compilación no puede ver dibujaría otra cosa allí. Lo reporta el generador de código fuente, así que se ve en el editor. Decide en el servidor, en PrefetchAsync o en un miembro [ServerOnly], y guarda el resultado en un campo; o llama a un [ServerAction] cuando el estado del navegador es una entrada.

EQ2114 llegó en 0.2.0-preview.60, cuando un servicio que el contenedor entrega a una página dejó de cruzar entero (ver Integración con el servidor).

EQ2112 queda aparte de su familia a propósito: System.IO se reportaba como EQ2101 hasta que ese código resultó pertenecer a la comprobación de resx de arriba, que el wiki ya había publicado. No es un desliz de numeración que haya que ordenar.

EQ2108–EQ2111: un significado por destino, o ninguno

La construcción se traduce, pero se LEERÍA distinta en el servidor y en el navegador. En vez de elegir por ti, eqc pregunta.

Código Significado Qué hacer
EQ2108 Un CultureInfo que el navegador no puede seguir: el formateo cruza InvariantCulture y CurrentCulture, y leer un número (Parse/TryParse sobre cualquier tipo numérico, Convert.ToInt32 y sus hermanos sobre una cadena, Convert.ToDecimal sobre una cadena o sobre un valor que pueda contener una, como un object) solo InvariantCulture. Convert.ToBoolean nunca consulta su proveedor pero C# lo evalúa, así que cruza InvariantCulture, CurrentCulture y un nulo, que son lecturas sin efecto, y cualquier otro proveedor que una app escriba, mientras que otro CultureInfo (GetCultureInfo(name), new CultureInfo(name)), que puede lanzar, no tiene gemelo que lo evalúe. La cultura es la propiedad a la que el proveedor se enlaza, como sea que se escriba: un miembro de otro tipo que también se llame InvariantCulture se rechaza, ya que puede devolver cualquier cultura. Formatea con un especificador explícito (ToString("N2") sigue la cultura de la app en ambos destinos), o convierte y lee con la cultura invariante.
EQ2110 Un número leído desde texto (o desde un valor que pueda contener texto, como un object) sin cultura alguna: C# lee en la cultura de la petición ("1,5" es 1,5 en pt) y el navegador en la invariante. Un número escrito como texto no necesita cultura: ambos destinos escriben el texto de la cultura. Di cuál quieres: pasa CultureInfo.InvariantCulture.
EQ2111 GetService sin argumento de tipo que cruzar: el registro se indexa por el NOMBRE de la interfaz, y no hay nada por lo que indexar. Llama a la sobrecarga genérica.
EQ2113 ConfigureAwait se descarta, hay un solo contexto al que volver, y descartarlo tiraría un argumento NO CONSTANTE sin evaluarlo. Pasa una constante, o evalúa la expresión en una variable local primero.

EQ3001–EQ3007: el generador de apps Photon

Código Significado
EQ3001 Una app Photon no tiene programa.
EQ3002 Una app Photon tiene más de un programa.
EQ3003 La razón de una capacidad debe ser una constante.
EQ3004 La clave de una autorización debe ser una constante: se firma en la app en tiempo de compilación, así que una clave construida en tiempo de ejecución nunca llega a la firma.
EQ3005 Un dato del bundle debe ser constante: el Info.plist se escribe en tiempo de compilación, así que un argumento construido en tiempo de ejecución nunca llega al manifiesto de la app. Cuenta cualquiera de los argumentos, y lo que sea que el método tome: una cadena, un bool, un AppCategory.
EQ3006 Una app Photon escribe su propio punto de entrada. El SDK genera uno desde CreateApp, así que una app que conservó su Main (o sus sentencias de nivel superior) tiene dos, lo cual el compilador reporta como CS0017 contra un archivo generado que la app nunca ha visto. Borra el de la app: lo que hiciera primero pertenece a CreateApp, que es la única mitad que Android ejecuta.
EQ3007 Un esquema que una app de teléfono abre debe ser una constante. Un teléfono responde CanOpen solo para los esquemas que su manifiesto lista (LSApplicationQueriesSchemes en iOS, queries en Android), y el manifiesto se escribe en tiempo de compilación, así que un esquema pasado a builder.Workspace.Opens(…) o a OpenUrlPolicy.Allowing(…) que se construya en tiempo de ejecución abriría sus enlaces y aun así se le diría que nada los abre. Se reporta solo donde se escribe un manifiesto: una app de escritorio lee la línea solo en tiempo de ejecución.

EQ3101–EQ3105: los generadores de código fuente

La superficie de fábrica generada y los modelos de formulario.

Código Significado
EQ3101 Un componente elige más de un constructor de fábrica ([UiFactory]).
EQ3102 Dos componentes comparten nombre.
EQ3103 Una propiedad de modelo de formulario tiene un tipo que ningún cuadro de texto puede contener.
EQ3104 Un atributo de validación no tiene regla en la que convertirse.
EQ3105 Un [Compare] nombra una propiedad que este formulario no tiene.

EQ4xxx: la compilación del SDK

Levantados por los propios targets de MSBuild del SDK, antes o después de que corra el compilador.

Código Significado Qué hacer
EQ4001 La herramienta de iconos de eQuantic, eqicon, que escribe los iconos de la app, el catálogo vectorial, el manifiesto de capacidades y el bundle de macOS, no está donde el SDK la busca. En una compilación desde el árbol de fuentes del repositorio, eQuantic.UI.Native.Build no se compiló antes de este proyecto: un grafo de compilación roto. Desde un paquete, el paquete se entregó sin tools/net10.0/eqicon.dll. Ninguno se arregla compilando dos veces. Desde la fuente, la herramienta es un ProjectReference de todo proyecto de app, así que mira los errores arriba de este, la compilación de la propia herramienta falló, o a quien quitó la arista. Desde un paquete, limpia la caché de eQuantic (dotnet msbuild -t:ClearEQuanticCache), restaura de nuevo, y reporta la versión del paquete si persiste.
EQ4002 El compilador de eQuantic, eqc, que convierte los componentes de la app en JavaScript, no está donde el SDK lo busca: en una compilación desde el árbol de fuentes del repositorio, eQuantic.Build no se compiló antes de este proyecto; desde un paquete, el paquete se entregó sin tools/net10.0/eqc.dll; o un EqcCliPath explícito nombra un archivo que no está. Esto era antes una advertencia, y una página sin JavaScript. Como EQ4001: no se arregla compilando dos veces. Desde la fuente, lee los errores arriba de este o restaura el ProjectReference; desde un paquete, limpia la caché de eQuantic y restaura; con un EqcCliPath explícito, corrige la ruta.
EQ4003 (advertencia) La app se firmará con una excepción del runtime endurecido (com.apple.security.cs.*, la familia que relaja una protección que el runtime endurecido impone) mientras la compilación no está endurecida. La clave llega a la firma y el sistema nunca la consulta. El SDK firma con --options runtime solo cuando EQuanticHardenedRuntime es true, así que cualquier otro valor no vacío es una compilación no endurecida, false, off, y el error de tipeo ture por igual, y el mensaje cita de vuelta lo que se escribió. Un valor VACÍO es una compilación de desarrollo ordinaria y nunca se reporta. Pon EQuanticHardenedRuntime=true, o quita la declaración. No EQuanticSigningIdentity: eso activa el endurecimiento solo donde la propiedad está vacía, así que no responde a esto. Nota lo que esto NO significa: los permisos del App Sandbox (com.apple.security.network.*, …files.*, …device.*) responden a PhotonEntitlements.AppSandbox, no al runtime endurecido, y una compilación de desarrollo ad-hoc los honra, así que nunca se reportan aquí.
EQ4004 Un programa que la compilación inició terminó con un código de salida distinto de cero y no reportó error propio: eqc, eqicon, bun, git, o en macOS codesign, ditto, notarytool, stapler o hdiutil. El mensaje nombra el programa y los argumentos con los que se inició, como el Exec de MSBuild nombró su comando, salvo para una llamada cuya línea de comandos no se repite: la del notario, que lleva una contraseña. Un programa que reportó sus propios errores, los códigos EQ de eqc por ejemplo, no recibe un EQ4004 después de ellos. Ejecuta el comando que el mensaje nombra, desde la carpeta del proyecto, para ver qué dice el programa. Un programa que no está en la máquina en absoluto es el MSB6003 propio de MSBuild.

Clone this wiki locally