Comment transmettez-vous des symboles de compilation conditionnelle (DefineConstants) à msbuild
Donc, à la fois cette et cette sont assez claires. Simplement passer /p:DefineConstants="SYMBOL"
Il ne fonctionne pas du tout pour moi, même dans un projet de test. Je m'attends à ce que de passage /p:DefineConstants="SYMBOLE" va remplacer tout de compilation conditionnelle des constantes définies dans la csproj. Pas le cas cependant...
Complet exemple de code ci-dessous:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DefineConstants
{
class Program
{
static void Main(string[] args)
{
#if DEV
Console.WriteLine("DEV");
#elif UAT
Console.WriteLine("UAT");
#else
Console.WriteLine("No environment provided");
#endif
}
}
}
.csproj fichier est:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{57A2E870-0547-475C-B0EB-66CF9A2FE417}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>DefineConstants</RootNamespace>
<AssemblyName>DefineConstants</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
construit à l'aide de:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild DefineConstants.sln /p:DefineConstants="DEV;DEBUG" /p:Configuration="Debug" /p:Platform="x86"
Exécutant le programme affiche:
No environment provided
Aider!
- Clic droit sur la solution -> Nettoyer la Solution -> réessayez votre commande créer. Pourrait aider.
- avez-vous essayé d'utiliser msbuild sur le fichier csproj plutôt que de la sln?
Vous devez vous connecter pour publier un commentaire.
À l'aide de
DefineConstants
fait vraiment le travail. Ce qui signifie que vous faites quelque chose de mal. Ma conjecture est que vous d'abord construit la projet sans définir quoi que ce soit, puis de nouveau. MSBuild verrez alors le projet a été construit déjà et de ne pas construire de nouveau, mais il suffit de copier les fichiers de sortie. Vous devriez poster la sortie de msbuild alors nous pouvons être sûrs, mais j'ai compilé votre projet à l'aide des commutateurs nécessaires seulement et voici le résultat (pleine sortie msbuild omis):Il semble que vous n'êtes pas de passage de compilation conditionnelle symbole. C'est pourquoi vous obtenez en sortie : Pas de environnement. Il suffit d'aller à projet de propriétés et cliquez sur l'onglet construire (à gauche en dessous de l'application). vous trouverez une case demandant de compilation conditionnelle symbole. Il suffit d'écrire votre constantes selon votre sortie désirée. pour ex. dans votre exemple, pour imprimer les "DEV" écrire DEV à la compilation conditionnelle de la boîte et de la reconstruction de votre projet. je suis sûr que cela va fonctionner.
Remarque: si vous voulez passer tout un symbole que votre code, il va imprimer : Pas de environnement sélectionné.