2009-07-23 4 views
1

Je tente d'installer un fichier .csproj pour avoir un groupe d'éléments conditionnel qui supprimera tous les éléments du groupe d'articles <ProjectReference>.MSBuild Erreur: L'attribut "Supprimer" dans l'élément <ProjectReference> n'est pas reconnu

Par exemple:.

<ItemGroup> 
    <ProjectReference Include="..\..\..\..\Projects\Registrar\Ucsb.Sa.Registrar.Common\Ucsb.Sa.Registrar.Common\Ucsb.Sa.Registrar.Common.csproj"> 
     <Project>{1EDDDE57-0181-41B4-B2AE-FB76450F85C8}</Project> 
     <Name>Ucsb.Sa.Registrar.Common</Name> 
    </ProjectReference> 
</ItemGroup> 
<ItemGroup Condition="$(OnBuildServer) == 'true'"> 
    <ProjectReference Remove="*" /> 
</ItemGroup> 
<ItemGroup Condition="$(OnBuildServer) == 'true'"> 
    <Reference Include="Ucsb.Sa.Registrar.Common"> 
     <SpecificVersion>False</SpecificVersion> 
     <HintPath>$(RegCommonDll)</HintPath> 
    </Reference> 
</ItemGroup> 

Mais, quand je charge le projet dans VS 2008, je reçois le message d'erreur « L'attribut « Supprimer » dans l'élément <ProjectReference> est non reconnu » La chose étrange est que l'attribut Remove est dans le schéma (C: \ Program Files \ Microsoft Visual Studio 9.0 \ Xml \ Schémas \ 1033 \ MSBuild \ Microsoft.Build.Core.xsd). Il y a la documentation de MSDN dessus (http://msdn.microsoft.com/en-us/library/bb651786.aspx). un commentaire à ce sujet au bas de l'article MSDN intitulé " MSBuild Items "

Le fichier .csproj semble pointer vers .NET 3.5; mais je suis incapable de vérifier si cette version de msbuild est utilisé pour charger le projet (personne ne sait comment faire?)

Première ligne de .csproj:

<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

PS. J'ai eu l'idée d'utiliser les conditions de Build with msbuild and dynamically set project references

+0

J'ai également essayé de changer les clés de registre à 3.5 par défaut. Ces clés ne configurent pas Visual Studio, mais configurent plutôt les valeurs par défaut lors de la création d'un nouveau projet (http://msdn.microsoft.com/en-us/library/bb397428.aspx, \ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSBuild \ 3.5 \, \ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 2.0 \). Cela, bien sûr, n'a pas fait l'affaire. J'ai également parcouru la variable d'environnement PATH et remplacé toutes les références au répertoire 2.0 par 3.5. Encore une fois, ceci n'a pas produit de solution. – smaglio81

Répondre

8

Vous ne pouvez pas utiliser l'attribut Supprimer avec des éléments statiques. Les éléments statiques sont ceux déclarés en dehors des cibles. Vous pouvez uniquement utiliser cet attribut à l'intérieur de des déclarations d'éléments dynamiques. Les déclarations d'éléments dynamiques sont celles trouvées à l'intérieur d'une cible. Par exemple, jetez un oeil au script de construction suivant.

<Project ToolsVersion="3.5" 
     xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <ItemGroup> 
    <ProjectReference Include="One.dll"/> 
    </ItemGroup> 
    <Target Name="Demo"> 
    <ItemGroup> 
     <ProjectReference Remove="@(ProjectReference)"/> 
    </ItemGroup> 
    <Message Text="ProjectReference : @(ProjectReference)"/> 
    </Target> 
</Project> 

Notez également que vous ne devriez pas utiliser Supprimer = « * » qui ne supprime pas tout. Il supprimera tous les fichiers du répertoire en cours contenus dans le groupe d'articles ProjectReference. Si vous voulez effacer un élément, vous devez faire Remove = "@ (ProjectReference)" où ProjectReference est l'élément.

+0

Existe-t-il un moyen de supprimer des éléments statiques? – citizenmatt

+0

@citizenmatt vous pouvez le faire avec un ItemGroup dans une cible, mais vous ne pouvez pas utiliser Remove sur un ItemGroup en dehors d'une cible. –

+0

C'est ce dont j'avais peur. Merci! – citizenmatt

Questions connexes