Wie übergibt man bedingte Kompilierungssymbole (DefineConstants) an msbuild
So, beide diese und diese sind ziemlich klar. Pass einfach auf /p:DefineConstants="SYMBOL"
Es funktioniert überhaupt nicht für mich, sogar in einem test-Projekt. Ich gehe davon aus, dass die übergabe /p:DefineConstants="SYMBOL" außer Kraft, die bedingte Kompilierung als Konstanten definiert, die in die csproj. Nicht der Fall...
Vollständige code-listing unten:
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-Datei ist:
<?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>
erstellt unter Verwendung von:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild DefineConstants.sln /p:DefineConstants="DEV;DEBUG" /p:Configuration="Debug" /p:Platform="x86"
Läuft das Programm zeigt:
No environment provided
Hilfe!
InformationsquelleAutor der Frage Steven P | 2012-05-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit
DefineConstants
definitiv nicht arbeiten. Was bedeutet, dass Sie etwas falsch machen. Meine Vermutung ist, dass Sie zuerst gebaut, das Projekt ohne Definition nichts, dann errichtet es wieder. MSBuild wird dann sehen, das Projekt wurde bereits gebaut und wird nicht wieder aufbauen, aber nur Ausgabe-Dateien. Sollten Sie post die Ausgabe von msbuild damit wir sicher sein können, aber für die Referenz, die ich kompiliert das Projekt mit dem notwendigen Schalter nur und hier ist das Ergebnis (full msbuild-Ausgabe weggelassen):InformationsquelleAutor der Antwort stijn
Es scheint, Sie sind nicht vorbei conditional compilation symbol. Das ist, warum Sie werden immer ausgegeben : Keine Umgebung zur Verfügung gestellt. Gehen Sie einfach auf Projekt Eigenschaften und klicken Sie auf die Registerkarte "erstellen" (Links unten Anwendung). finden Sie ein Fenster mit der Frage für bedingte Kompilierung symbol. Schreiben Sie einfach Ihre Konstanten gemäß Ihrer gewünschten Ausgabe. für die ex. in Ihrem Beispiel, zu drucken "DEV" DEV schreiben an die bedingte Kompilierung box und erstellen Sie Ihr Projekt neu. ich bin sicher, es wird funktionieren.
Hinweis: wenn Sie möchten, übergeben Sie jedes symbol, das als pro Ihr code wird Druck : Keine Umgebung ausgewählt.
InformationsquelleAutor der Antwort Sanket Raval