2009-08-26 6 views
3

Nous avions l'impression que la définition du cadre cible sur les propriétés d'une solution limiterait cette application à utiliser uniquement ce cadre ou de la fonctionnalité est ci-dessous. Nous venons d'apprendre que, que quelqu'un peut ajouter une référence et commencer à utiliser le code d'un cadre supérieur versionné et le compilateur ne se plaindra pas un peu. Étant donné que nous voudrions éviter à l'avenir que quelqu'un a des idées sur la façon dont je pourrais détecter quelque chose faisant référence à une version supérieure ou non? Je dois échouer la construction si quelqu'un ajoute du code au-dessus de notre cible.Comment puis-je appliquer une version spécifique du framework .net

+0

AMHA que le drapeau ne permettant pas la langue caractéristiques (clr) des cadres supérieurs, et non pas les bibliothèques .. – andyp

Répondre

0

Pourquoi avez-vous besoin d'éviter cela si cela fonctionne? Tant que vous n'utilisez aucune des nouvelles fonctionnalités, je crois qu'il est possible d'avoir des DLL compatibles "forward".

+1

Nous voulons vous assurer qu'un développeur n'a pas accidentellement/ajouter sans le savoir, l'utilisation l'une des nouvelles fonctionnalités. – Alex

+0

Je m'attendrais à ce que le compilateur attrape ces problèmes pour vous. Si ce n'est pas le compilateur, alors tous les tests unitaires l'attraperaient à coup sûr. – David

1

En supposant que vous ciblez .NET 2.0 et supérieur ... votre build pourrait échouer si vous détectez des références à System.Core ou à d'autres assemblys 3.x (par exemple WPF) dans les références de vos projets.

MISE À JOUR

Vous pouvez commencer par vérifier dans chaque fichier .PROJ pour:

<TargetFrameworkVersion>v3.5</TargetFrameworkVersion> 

Puis, dans la balise <ItemGroup>:

<Reference Include="System.Core"> 
    <RequiredTargetFramework>3.5</RequiredTargetFramework> 
</Reference> 
<Reference Include="System.Xml.Linq"> 
    <RequiredTargetFramework>3.5</RequiredTargetFramework> 
</Reference> 
<Reference Include="System.Data.DataSetExtensions"> 
    <RequiredTargetFramework>3.5</RequiredTargetFramework> 
</Reference> 

Cela pourrait être une tâche NAnt personnalisée ou écrivez votre propre analyseur pour rechercher ces nœuds et échouer la construction.

+0

Et comment les détecteriez-vous? J'ai regardé les manifestes, les fichiers proj, et similaires. Et, sans une liste globale de chaque DLL et quelle version il est je ne peux pas comprendre comment déterminer le mieux. Les bonnes nouvelles sont que j'ai testé VS 2010 et il fait faire cela, donc la meilleure option pourrait bien être attendre 2010 et la mise à niveau immédiatement. – Alex

Questions connexes