Pour Noda Temps la version 1.1, l'objectif principal est de construire une Bibliothèque de classes Portable saveur, principalement pour le support de Windows Phone et Windows Store apps. Cela signifie la perte de certaines fonctionnalités, afin de nous construire une configuration de bureau et un PCL configuration (pour chacun de debug, release, et "signé").
Pour éviter d'avoir à travailler avec je ne sais combien de fichiers de projet, tous les 6 configurations existent dans le même fichier de projet. Le fichier de projet est adapté pour générer une propriété appelée la "Portabilité", qui est défini à "PCL" ou "Bureau", comme ceci:
<!-- Set the custom Portability property based on configuration -->
<PropertyGroup>
<Portability Condition="'$(Configuration)' == 'Debug Portable'">PCL</Portability>
<Portability Condition="'$(Configuration)' == 'Release Portable'">PCL</Portability>
<Portability Condition="'$(Configuration)' == 'Signed Release Portable'">PCL</Portability>
<!-- Default to desktop if not explicitly set above -->
<Portability Condition="'$(Portability)' == ''">Desktop</Portability>
</PropertyGroup>
Ensuite, nous avons séparé les groupes de propriétés pour portable vs desktop, basée sur les biens ci-dessus. C'est ce qui définit le type de projet que la "bibliothèque de classes" ou "bibliothèque de classes portable" (avec l' OutputType
de Library
, ce qui est partagé):
<!-- Desktop-specific properties -->
<PropertyGroup Condition="'$(Portability)' == 'Desktop'">
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
</PropertyGroup>
<!-- PCL-specific properties -->
<PropertyGroup Condition="'$(Portability)' == 'PCL'">
<MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>
<ProjectGuid>{c78f6992-28d7-45c9-a4c1-6eaa649f3247}</ProjectGuid>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Profile2</TargetFrameworkProfile>
<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
</PropertyGroup>
En général, cela fonctionne très bien j'ai la solution différente configurations, de sorte que je peux construire et tester tout à la notification d'un moment, et j'ai seulement besoin d'ajouter chaque nouveau .cs
le fichier à un seul fichier de projet. Sous Visual Studio 2012 Professional (qui est ce que j'utilise), je suis parfaitement heureux.
Le problème arrive quand j'essaye de charger la solution dans Visual Studio Express (soit VS2010 ou VS2012). Alors que la solution est en cours de chargement, il échoue avec une erreur de dire que certains projets ne peuvent pas être chargées, et les deux projets qui se fondent PCL versions alors la sortie de la construction comme ceci:
C:\Path\To\NodaTime.csproj : error :
The project file 'C:\Path\To\NodaTime.csproj' cannot be opened.
There is a missing project subtype.
Subtype: '{786C830F-07A1-408B-BD7F-6EE04809D6DB}'
is unsupported by this installation.
(Reformaté pour plus de clarté.) Les deux projets de refuser de charger, de sorte que vous pouvez même pas parcourir le code source.
J'avais vraiment espéré que même si Express les utilisateurs ne pouvaient pas construire le PCL versions, ils étaient en mesure de charger jusqu'à la solution, consulter la source, et de construire non-PCL versions. MSBuild fonctionne à partir de la ligne de commande, mais ce n'est pas aussi amical.
J'ai essayé de supprimer les configurations de solution qui se réfèrent à la PCL configurations de projet, et qui ne l'aide pas. Bizarrement assez, même en commentant l'élément XML, comme ceci:
<!--
<ProjectTypeGuids>(Guids as before)</ProjectTypeGuids>
-->
n'aide pas - bien que la suppression de la ligne. C'est comme si Visual Studio n'est pas réellement le charger comme un véritable fichier XML. (Je n'ai pas essayé de chargement de la version avec le commentaire sur l'élément en VS Pro.)
Je pourrais aller en bas de la route de la génération distincte PCL fichiers de projet si j'en ai besoin, mais je tiens vraiment à éviter si possible - il serait normal de développement de plus en plus douloureux. De même, je pourrait générer Express-seulement PCL et les fichiers de solution, mais encore une fois, je préfère ne pas qu'il se sent mal.
Alors que, idéalement, j'aimerais soutenir VS Express 2010 et en 2012, si il y a une solution qui ne fonctionne que pour 2012, que serait un bon début.
Donc, est-il un moyen de persuader Visual Studio Express qu'elle peut charger un projet en dépit d'un conditionnel propriété du groupe (dont la condition n'est pas remplie), se référant à un type de projet, il ne le sait pas?