Existe-t-il un moyen de déclarer globalement un #define?
Comme je veux avoir un fichier qui a par exemple,
#define MONO
et je veux que tous les fichiers de code source sachent que cette directive de pré-processeur est définie. Comment pourrais-je y parvenir?
Mise à jour: Vous ne pouvez pas définir une solution «à l’échelle de la solution», mais la réponse ci-dessous est réalisable projet par projet.
Vous les définissez dans les options de compilation ou les options de compilation:
http://msdn.Microsoft.com/en-US/library/76zdzba1(v=VS.80).aspx (VS2008) http://msdn.Microsoft.com/en- US/bibliothèque/76zdzba1 (v = VS.100) .aspx (VS2010)
voir la rubrique "Pour définir une constante personnalisée".
Mettre à jour
Documentation Microsoft sur les options de construction
Vous accédez aux options de construction en cliquant avec le bouton droit de la souris sur le projet et en sélectionnant les propriétés dans le menu.
Je ne pense pas qu'il y ait un moyen de créer un à l'échelle de la solution #define. Vous pouvez en créer un pour chaque projet/assemblage, comme indiqué dans les autres réponses, mais vous devrez le faire pour chaque projet de la solution si vous avez besoin de all fichiers de code source pour en savoir plus .
Je connais la solution pour les projets C # (je ne l'ai pas testée pour d'autres projets)
Par exemple vous avez:
Project1\
Project2\
Solution1\Solution1.sln
Solution2\Solution2.sln
Créer le fichier SolutionDefines.targets
dans le répertoire de la solution
Project1\
Project2\
Solution1\Solution1.sln
Solution1\SolutionDefines.targets
Solution2\Solution2.sln
Solution2\SolutionDefines.targets
Solution3\Solution2.sln
Solution3\|no target file|
dans chaque fichier de projet, ajoutez:
<Import Project="$(SolutionDir)SolutionDefines.targets" Condition="exists('$(SolutionDir)SolutionDefines.targets')" />
Dans Solution1\SolutionDefines.targets
ajouter:
<Project DefaultTargets="Build" xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DefineConstants>$(DefineConstants);TRACING_BUILD</DefineConstants>
</PropertyGroup>
</Project>
Dans Solution2\SolutionDefines.targets
ajouter:
<Project DefaultTargets="Build" xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DefineConstants>$(DefineConstants);ANOTHER_DEFINE</DefineConstants>
</PropertyGroup>
</Project>
Dans ce cas, vous avez:
Pour Solution1 - tous les projets ont ajouté TRACING_BUILD
define
Pour Solution2 - tous les projets ont ajouté ANOTHER_DEFINE
define
Pour Solution3 - tous les projets - aucune définition ajoutée
Dans cette approche, vous devez stocker toutes les solutions dont la solution est définie dans des répertoires distincts.
en 2013, vous pouvez utiliser/define: x ou/d: x http://msdn.Microsoft.com/en-us/library/0feaad6z.aspx
Créez une nouvelle configuration de solution dans Configuration Manager et assurez-vous que la case est cochée pour créer également de nouvelles configurations de projet. Ensuite, dans les propriétés Build de chaque projet, saisissez MONO
dans la zone Symboles de compilation conditionnelle .
Il existe une solution supplémentaire, corrigez-moi si je me trompe:
Par exemple, ProjectA
fait référence à ProjectB
et ProjectsCommon
contient une variable statique de base. Les deux projets font référence à ProjectsCommon
.
Code en ProjectsCommon
:
[Assembly: InternalsVisibleTo("ProjectA")]
------------------------------------------
public class ConditionVariables
{
public static bool IsABC { get; internal set; } = false;
}
Code en ProjectA
:
#if ABC
ProjectsCommon.ConditionVariables.IsABC = true;
#endif
Code en ProjectB
:
if (ProjectsCommon.ConditionVariables.IsABC )
{
// first scenario
}
else
{
// second one
}
Cependant, le code dans ProjectA
devrait être exécuté en premier. C'est probablement bien quand ProjectA
est un projet bootstarapper.