¿Por qué la unidad de 'usos' desaparecerá cuando tuve una nueva unidad?

StackOverflow https://stackoverflow.com/questions/2555259

  •  23-09-2019
  •  | 
  •  

Pregunta

Tengo un proyecto de prueba Unidad para mi Aplicación que utiliza marco DUnit. Este proyecto tiene una unidad rodeada por un $IFDEF a los resultados de pruebas de salida en un archivo XML en lugar de la interfaz gráfica de usuario o la línea de comandos solo. XML_OUTPUT definir está habilitado de conmutación de la configuración de generación.

program DelphiCodeToDoc_Tests;

uses
  TestFramework,
  TextTestRunner,
  Sysutils,
  Forms,
  GUITestRunner,
{$IFDEF XML_OUTPUT}
  XmlTestRunner2 in 'DUnit_addon\XmlTestRunner2.pas',
{$ENDIF}
  DCTDSetupTests in 'IntegrationTests\DCTDSetupTests.pas',
  ...

Esto funciona perfectamente. La cuestión se inicia cuando estoy añadiendo una nueva unidad para este proyecto desde el IDE (una nueva unidad con 'Archivo> Nuevo> Unidad').

El proyecto de prueba ahora es:

uses
  TestFramework,
  TextTestRunner,
  Sysutils,
  Forms,
  GUITestRunner,
  DCTDSetupTests in 'IntegrationTests\DCTDSetupTests.pas',
  ...
  MyNewUnit in 'IntegrationTests\MyNewUnit.pas';

Como se ve, el XML_OUTPUT prueba ha desaparecido ... Cada vez que estoy añadiendo una unidad, Delphi IDE elimina esta prueba.

¿Sabe por qué y cómo puedo evitarlo?

¿Fue útil?

Solución

Sólo código que se utiliza en realidad se compila en su solicitud de todos modos, por lo que normalmente, no se pierde nada con tener unidades en la cláusula Uses que no se utilizan.

Se puede ver todo el código que está vinculado en su aplicación cuando se ejecuta el programa dentro de su IDE. Usted debe ver los puntos azules junto a todo el código compilado.

La única advertencia es que usted debe comprobar la sección initialization de las unidades que son de interés. Cualquier código que se encuentra en la sección de inicialización se incluye automáticamente, simplemente mediante la inclusión de la unidad, ya que cualquier código en esa sección se ejecuta tan pronto como se inicia la aplicación. Se podría añadir a su directiva de compilación dentro de la sección de inicialización de la unidad, si es necesario, para evitar cualquier código de inicialización de su vinculación y corrió.

Otros consejos

Se puede añadir una unidad de proxy para el programa principal de derivación a este comportamiento problemático (que muchos de nosotros consideramos un error, no es una característica).

program DelphiCodeToDoc_Tests;

uses
  ...
  XMLTestRunnerProxy,  
  ...

y

unit XMLTestRunnerProxy;

interface

{$IFDEF XML_OUTPUT}
uses
  XmlTestRunner2 in 'DUnit_addon\XmlTestRunner2.pas';
{$ENDIF}

implementation

end.

aplicaciones La lista de la DPR es administrado por el IDE. Por desgracia, no hay nada que pueda hacer al respecto. Oficialmente, no se supone que poner IFDEFs en el medio de la DPR aplicaciones lista porque se va a hacer este tipo de cosas si lo hace.

Lo que me hacer es dejar la unidad XmlTestRunner2 en el proyecto, y pusieron los IFDEFs dentro de la propia unidad de modo que si usted no tiene XML_OUTPUT conjunto, no hace nada de compilación.

La extracción se produce cada vez que el IDE tiene que modificar cláusula USOS de la DPR. El uso de "Guardar como" para cambiar el nombre de una unidad va a hacer lo mismo.

Para evitar que yo siempre crear mis nuevas unidades externamente como un archivo de texto vacío y luego añadirlos a la RDP de forma manual. Es un poco más de trabajo al principio, pero lo hace terminar única que incluye las unidades si son necesarios. También tenga en cuenta que cuando esto sucede si está usando nada más tardar Delphi 2005 puede cambiar a la pestaña "Historial" en la parte inferior del panel de edición y copia el contenido del archivo "local" para obtener la versión anterior a cuando la unidad se añadió y despojado de todo lo demás.

Y sí, esto es un error. QC # 6294 específicamente, y es abierta, por lo que es consciente de Embarcadero de la cuestión.

Tenga en cuenta que tiene dos proyectos. Una vez con el código opcional, otro sin él. Luego de construcción lo que usted quiere, o ambos. El uso de grupos de proyectos, que van a trabajar muy bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top