6 votes

Compilation conditionnelle dans les fichiers .aspx

J'ai besoin que le fichier .ASPX se comporte différemment en fonction d'un symbole de compilation conditionnelle.

Prenons un exemple simple :

<%@ Control Language="C#" AutoEventWireup="true" (...) %>
<% #ifdef DEBUG %>
     <asp:SomeDebugControlHere runat="server"/>
     .. well .. a LOT of code here
<% #else %>
    <asp:SomeReleaseControlHere runat="server"/>
    .. and a LOT of other code here
<% #endif %>

Édition ultérieure : quelques clarifications supplémentaires. Le problème est que la classe SomeDebugControlHere n'est même pas défini dans la version de base (c'est beaucoup plus compliqué dans la réalité, mais gardez cet exemple). Donc, dans la page.aspx.designer.cs, je dois obtenir ceci dans la version de débogage :

/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.SomeDebugControlHere myControl

et ceci dans le release build : (et jamais les deux)

/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.SomeReleaseControlHere myControl

Il est évident que le balisage du fichier ASPX doit être différent, mais j'ai besoin que le fichier designer.cs soit également modifié pour intégrer les nouveaux objets/classes.

J'espère simplement que quelqu'un connaît une façon intelligente de faire cela, soit par un héritage de contrôle, soit par n'importe quoi qui me permettrait de spécifier différentes classes de contrôle en fonction des paramètres de compilation.

8voto

Nick Craver Points 313913

Ton "si" a juste besoin d'une mise au point, ça devrait être le cas :

<% #if DEBUG %>

Si vous voulez qu'il se comporte comme le ferait un ensemble de code C#.

1voto

Radu094 Points 7796

Il semble qu'il y ait une différence lors de la compilation avec les symboles de compilation selon l'endroit où vous les déclarez : Comme propriété du projet, en utilisant une directive @Page ou dans web.config.

Seuls les symboles définis dans web.config semblent fonctionner dans les fichiers .aspx.

<compiler
      language="c#;cs;csharp" extension=".cs"
      compilerOptions="/d:MY_CONSTANT"
      type="Microsoft.CSharp.CSharpCodeProvider, 
        System, Version=2.0.0.0, Culture=neutral, 
        PublicKeyToken=b77a5c561934e089" />
    </compilers>

J'ai trouvé des informations à ce sujet ici y ici

1voto

Zhaph - Ben Duguid Points 18573

Je pense que, dans une certaine mesure, la réponse se trouve dans les commentaires générés automatiquement dans le fichier du concepteur :

/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.SomeDebugControlHere myControl

Vous devriez probablement déplacer la déclaration de ces contrôles dans votre fichier de code-behind, et les envelopper dans une correspondance de #ifdef déclarations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X