2009-09-03 7 views
0

J'ai un projet de site Web que je veux construire en utilisant CruiseControl.net.Le projet de site Web est construit dans VS2008 SP1 mais pas dans MSBUILD via CruiseControl.net

Sur une page il y a un contrôle utilisateur imbriqué dans un contrôle répéteur, et je dois obtenir une référence fortement typé pour que le contrôle de l'utilisateur dans le gestionnaire d'événements ItemDataBound:

ASP.usercontrols_stars_ascx stars = (ASP.usercontrols_stars_ascx)e.Row.FindControl("stars"); 
    stars.StarCount = Convert.ToInt32(drv["rating"]); 

Cela fonctionne très bien dans VS2008 mais pauses MSBUILD avec l'erreur suivante:

w:\CCNet\InflatableBoats\Working\IBWeb\UserControls\DisplayReviews.ascx.cs (49,): 

errorCS0234: le type ou le nom namespace 'usercontrols_stars_ascx' n'existe pas dans l'espace de noms 'ASP' (vous manque une référence d'assemblage?)

Je pense qu'il peut s'agir d'un problème d'espace de noms car MSBUILD ne semble pas reconnaître l'espace de noms ASP utilisé par le projet de site Web pour les contrôles et pages utilisateur.

Répondre

0

Vous devez faire référence à la classe codebehind à la place de la classe générée par ascx. La classe ascx hérite de votre classe codebehind. Donc, définissez votre propriété StarCount dans codebehind, référence cela, et vous devriez aller bien.

0

Apparemment, si vous faites référence à un ensemble de l'onglet Parcourir qui est répertorié dans l'onglet .NET de la boîte de dialogue Ajouter une référence (qui est pas le même que le GAC) et qui est dans le même Installez l'emplacement, Visual Studio supposera que vous souhaitez utiliser le Registre pour rechercher le fichier. Je pense qu'il définit la version spécifique sur True, qui est la seule façon de le remarquer dans l'EDI. Cela empêche quiconque de le compiler, même s'ils ont les mêmes DLL dans le même emplacement, sauf s'ils ont exécuté le programme d'installation pour ce package. Ce bit m'a une fois avec CruiseControl lorsque j'ai installé le bloc d'application Unity directement dans un dossier TFS, puis ajouté les binaires à TFS. Le fichier .csproj n'a pas une entrée HintPath pour la référence, donc le serveur de génération n'a pas pu trouver la DLL.

J'ai fini par désinstaller le bloc avec Ajout/Suppression de programmes, puis récupérer les binaires à partir de TFS. En supprimant et en ajoutant de nouveau les références, le problème a été résolu.

Ceci peut ne pas être pertinent à votre situation (j'essaierai la suggestion de jrummell d'abord), mais j'ai pensé que je le mentionnerais.

Visual Studio a tendance à supposer qu'il connaît mieux que le développeur. Généralement pas.

Questions connexes