36 votes

Puis-je charger un projet de bibliothèque de classes "parfois portable" dans Visual Studio Express?

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?

10voto

Jon Skeet Points 692016

David Kean commentaire ici, m'a donné la réponse que j'utilise pour le moment:

ou de supprimer l'élément tout à fait, ce sera opt-vous de "portable" améliorations, telles qu'une INTERFACE graphique pour la modification de la cible cadre, etc

J'ai essayé, et il fonctionne comme un rêve. Sur les machines qui ont tout correctement installé, vous pouvez même construire les PCL version en vertu de l'Express! J'ai vérifié que le binaire résultant est vraiment un PCL, et il semble très bien.

Je ne serais pas surpris de trouver que j'ai rencontré quelques problèmes par la suite, mais pour l'instant cela fonctionne très bien pour moi. Je peux facilement vivre sans les améliorations dans Visual Studio, il a déjà été confondu par mon projet en ayant différentes configurations de génération, donc je ne pense pas que j'ai été d'obtenir beaucoup d'avantages de toute façon.

3voto

Martin Suchan Points 7202

Comme la réponse est ici:
Visual Studio 2012 Express avec Bibliothèque de classes Portable?
et ici:
Fonctionnalité de partage à l'aide des Bibliothèques de Classe

Bibliothèque de classes Portable projets ne sont pas pris en charge dans l'express SKU...besoin d'un plus SKU pour le soutien. Bien sûr, le binaire (par exemple, en utilisant comme référence) est tout simplement pas le projet/source de soutien.

Je peux imaginer qu'il y a une raison simple pour que - il existe différents types de VS2012 les éditions Express: pour Windows Phone de développement, pour les applications de Bureau, pour les applications Windows 8... j'ai misé sur le Windows Phone Express edition ne sait pas sur les Windows Phone type de projet et vice-versa. Cela pourrait être la simple raison pourquoi PCLs ne sont pas pris en charge.

Bien que l'idée de Portable Bibliothèques de Classe est vraiment sympa, c'est encore assez limité dans de nombreuses façons, par exemple vous ne pouvez pas utiliser la compilation conditionnelle à l'aide de #si xy pour autant que je sais. Si vous devez vraiment utiliser Visual Studio Express pour le développement, alors il peut être préférable d'utiliser des projets pour chaque plate-forme avec référencé fichiers source et de compilation conditionnelle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X