2010-06-13 10 views
2

J'ai deux versions d'un projet. Un pour Silverlight et un pour .NET. Le projet SL a la grande majorité de la base de code en elle. Je veux globalement ajouter tous les fichiers du projet SL dans la version .NET en tant que fichiers liés. J'ai réussi à le faire avec succès comme celui-ci dans le fichier csproj pour la version .NET:Structure de répertoire de fichiers liés Visual Studio

<Compile Include="..\MyProj.Common.SL\**\*.cs" Exclude="..\MyProj.Common.SL\Properties\**"> 

Malheureusement, cela ajoute tous les fichiers directement à la racine de mon projet ... donc je me retrouve avec un longue liste illisible des fichiers liés dans le projet .NET. Je ne veux vraiment pas vraiment avoir à gérer à la main une structure de répertoires en double complète et à gérer les changements de nom de répertoire et les changements de nom de fichier et autres joyeusetés.

Alors, est-il possible de faire en sorte que Visual Studio conserve la structure du répertoire lors de l'ajout de fichiers liés de la manière générique ci-dessus? Ou existe-t-il au moins un moyen de regrouper tous les fichiers liés dans un répertoire du projet .NET comme MyProj.Common.SL.Links? Le plus proche que je suis venu est de mettre le <Visible>false</Visible> sous la balise <Compile>, qui supprime effectivement la longue liste illisible de plus de 300 fichiers .... mais malheureusement, cela résoud Resharper, qui ne voit plus ces fichiers comme valide et il devient fou sur tous les projets qui référencent le projet .NET. Si je pouvais trouver une façon de rendre Resharper pas tout foiré, ce serait une solution acceptable aussi ...

Des suggestions?

Merci.

+1

Je voudrais voir quelque chose comme ceci implémenté comme un plugin VS.Appelez-le "Lier tous les fichiers du projet" ou quelque chose, où vous pourriez être dans le projet A et lui dire de lier tous les fichiers du projet B, et il ajouterait tous les fichiers du projet B dans le projet A comme des liens avec la structure du répertoire intact . Il pourrait alors fonctionner comme une étape de pré-construction. Est-ce que n'importe qui avec l'expérience de VS extension peut entrer? – PhilChuang

Répondre

4

Je pense avoir trouvé un moyen d'obtenir ce travail à:

<Compile Include="..\MyProj.Common.SL\**\*.cs" Exclude="..\MyProj.Common.SL\Properties\**"> 
    <Link>MyProj.Common.SL.LinkedFiles\MyProj.Common.SL.LinkedFiles</Link> 
</Compile> 

Il va créer un dossier MyProj.Common.SL.LinkedFiles et regrouper tous les fichiers liés dans ce dossier.

0

Je pense que je ferais ceci:

  • copie <Compile> de projet existant, les éléments qui ont vraisemblablement par exemple Include="foo.cs" et Include="Folder\bar.cs"
  • les coller dans le nouveau projet
  • Rechercher et remplacer <Compile Include="(.*?)" /> avec <Compile Include="..\Other\$1" ><Link>$1</Link></Compile>

Je ne sais pas si je suis la recherche d'expression régulière et remplacer la syntaxe exactement droite, mais le point est, vous avez déjà un bon projet, vous devriez pouvoir couper, coller, regex-le remplacer pour obtenir le même ensemble de fichiers, seulement référencé à partir d'un dossier différent, et avec la même structure de répertoire.

Vous aurez toujours deux .csproj à maintenir à ce stade, mais cela est également facilement corrigé. Maintenant, prenez cette nouvelle liste d'éléments de compilation et placez-la dans un fichier nommé par ex. "Common.csproj" qui contient uniquement le groupe de propriétés avec ces éléments de compilation, puis avez les deux projets <Import Include="..\Common.csproj" /> et n'incluez aucun élément Compile.

Fondamentalement, un peu de travail manuel pour refactoriser le fichier .csproj pour le partage une fois, et puis je pense que vous serez réglé. Je ne suis pas sûr que ce soit le moyen le plus facile de vous débloquer, mais je pense que cela ressemble à peu près à ce que vous voulez pour une structure "idéale".

Questions connexes