2009-12-12 2 views
1

J'ai une application web qui atterrit sur une plateforme d'hébergement partagé pour mon entreprise. Cette plate-forme possède un code global d'en-tête/pied de page que toutes les applications de la plateforme utilisent en utilisant des fichiers d'inclusion. Je ne peux pas changer la façon dont les fichiers d'en-tête sont structurés et comment ils doivent être cosumés - cela est dicté par un autre groupe. J'ai un serveur de construction qui n'a pas IIS installé par conception. J'essaie d'utiliser aspnet_compiler.exe pendant le processus de génération pour générer les fichiers de site Web précompilés pour le déploiement.Comment puis-je obtenir le compilateur aspnet pour gérer une page qui contient un fichier include

Cependant, lorsque la construction va, j'obtiens des erreurs comme ceci:

/Company/Controls/Header.ascx(7): Erreur ASPPARSE: Impossible de mapper le chemin '/sites/header.inc'.

Le contrôle Header.ascx a ce côté serveur inclure dans le code HTML:

< - virtuel #include = "/ sites/header.inc" ->

Sur ma machine locale , J'ai créé un répertoire virtuel dans IIS nommé "sites" qui pointe vers le code d'en-tête global (que j'ai également copié sur ma machine locale). Ce même "sites" virtuel existe dans IIS sur l'environnement d'hébergement. Je voudrais vraiment éviter d'avoir à installer IIS sur la machine de construction parce que c'est une machine de construction partagée et je ne connais personne pour utiliser par erreur les dépendances IIS dans leur code. La machine de génération ne devrait pas avoir besoin d'IIS. Quelle est la meilleure façon d'obtenir les fichiers de site précompilés que aspnet_compiler.exe produit pendant ma construction sans installer IIS?

Répondre

0

N'utilisez pas les inclusions côté serveur. Ils sont une technologie ancienne et sont désactivés sur la plupart des sites modernes.

Je vous recommande à la place de créer des fichiers .ascx pour remplacer chacun des fichiers .inc et les utiliser à la place.

+0

Je suis d'accord que les fichiers .inc sont obsolètes, mais cette réponse ne répond pas à la question - comme je l'ai mentionné, je ne peux pas changer la structure de la façon dont les fichiers sont fournis. Étant donné que je ne peux pas changer la structure, comment puis-je obtenir des fichiers de site pré-compilés? – Shawn

+0

Je ne vois pas pourquoi vous vous attendez à ce que cela fonctionne. Les fichiers .inc sont utilisés par IIS. aspnet_compiler n'a rien à voir avec IIS. –

1

Microsoft a un exemple très simple de la façon de remplacer un include ...

http://support.microsoft.com/kb/306575

En regardant le chemin de votre erreur, il semble que vous utilisez déjà une sorte de contrôle global de l'utilisateur et je Je suppose que c'est un fichier qui est réutilisé par d'autres applications ou langages, donc je suggérerais une version plus personnalisée avec une gestion des erreurs et autres car elle fonctionne sur un lecteur mappé mais la réponse de base est que vous devez lire le fichier et l'affiche dans le flux pendant l'événement Render.

+1

Un détail que je n'ai pas mentionné est que le fichier .inc que je référence - et que je ne peux pas contrôler ou restructurer dans un meilleur format - a des inclusions côté serveur imbriquées. Donc, si je fais ce que vous avez suggéré, cela fonctionne, mais je reçois seulement l'inculde le plus haut et les inclusions côté serveur imbriquées sont perdues. Je suis à la recherche de réponses qui fonctionnent avec la situation de fichier .inc que j'ai répertorié comme un «donné» à ce problème plutôt que d'essayer de remplacer le fichier .inc par quelque chose d'autre. – Shawn

+0

Comme indiqué précédemment, les inclusions côté serveur sont mal vues mais il est possible que IIS les gère pour n'importe quel type de fichier. Je n'ai pas essayé ceci avec des inclusions imbriquées avant et cela aura un impact sur la performance mais ... http://tim-stanley.com/post/How-To-Enable-HTM-Server-Side-Include- Parsing-in-IIS.aspx http://msdn.microsoft.com/en-us/library/ms525940.aspx Une autre option serait de créer un contrôle personnalisé qui peut lire un include, analyse, puis lit chaque imbriqué inclut, puis le met en cache avec une dépendance de changement de fichier, beaucoup plus délicat et sujet à erreur mais fonctionnera. – JKG

0

Essayez ceci:

<!-- #include virtual="~/sites/header.inc" --> 

Le ~ est un raccourci pour "racine de l'application Web."

Questions connexes