2012-05-23 14 views
18

पर सशर्त संकलन प्रतीकों (DefineConstants) को कैसे पास करते हैं, तो this और this दोनों स्पष्ट हैं। बस /p:DefineConstants="SYMBOL"आप एमएसबिल्ड

यह एक परीक्षण परियोजना में भी मेरे लिए बिल्कुल भी काम नहीं करता है। मुझे उम्मीद है कि गुजरने/पी: DefineConstants = "SYMBOL" csproj में परिभाषित किसी भी सशर्त संकलन स्थिरांक को ओवरराइड करेगा। ऐसा नहीं है लेकिन ...

पूर्ण कोड नीचे लिस्टिंग:

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 फ़ाइल है: का उपयोग कर

<?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> 

बनाया:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild DefineConstants.sln /p:DefineConstants="DEV;DEBUG" /p:Configuration="Debug" /p:Platform="x86" 

कार्यक्रम चल रहा है पता चलता है:

No environment provided 

सहायता!

+0

समाधान पर राइट क्लिक करें -> स्वच्छ समाधान -> अपने निर्माण आदेश को पुनः प्रयास करें। मदद हो सकती है। – Alex

+0

क्या आपने एसएसपीआरजे फ़ाइल पर एमएसबिल्ड का उपयोग करने की कोशिश की है? – KazR

उत्तर

26

DefineConstants का उपयोग निश्चित रूप से काम करता है। जिसका मतलब है कि आप कुछ गलत कर रहे हैं। मेरा अनुमान है कि आपने पहली बार कुछ भी परिभाषित किए बिना प्रोजेक्ट बनाया है, फिर इसे फिर से बनाया है। एमएसबिल्ड तब देखेंगे कि परियोजना पहले से ही बनाई गई थी और फिर से नहीं बनाई जाएगी, लेकिन आउटपुट फाइलों की प्रतिलिपि बनाएँ। आप MSBuild के उत्पादन में पोस्ट करना चाहिए ताकि हम सुनिश्चित हो सकता है, लेकिन संदर्भ के लिए मैं आवश्यक स्विच केवल और यहाँ नतीजा है का उपयोग कर अपनी परियोजना संकलित (पूर्ण MSBuild उत्पादन छोड़े गए):

> msbuild ConsoleApplication1.sln /p:DefineConstants="DEV" /t:Rebuild 
.... 
Building solution configuration "Debug|x86". 
Project ... is building ConsoleApplication1.csproj" (Rebuild target(s)). 
... 
> ConsoleApplication1\bin\Debug\DefineConstants.exe 
DEV 
> msbuild ConsoleApplication1.sln /p:DefineConstants="UAT" /t:Rebuild 
... 
> ConsoleApplication1\bin\Debug\DefineConstants.exe 
UAT 
> msbuild ConsoleApplication1.sln /t:Rebuild 
... 
> ConsoleApplication1\bin\Debug\DefineConstants.exe 
No environment provided 
+5

/टी: वास्तव में पुनर्निर्माण। अच्छा आदमी। –

+0

क्या यह कहीं भी दस्तावेज किया गया है कि DefineConstants को काम करने के लिए पुनर्निर्माण की आवश्यकता है, या क्या यह सामान्य ज्ञान है? तो DefineConstants का उपयोग कर वृद्धिशील बिल्ड करने का कोई तरीका नहीं है? – JohnZaj

+0

@jJack * incremental * के साथ आपका क्या मतलब है, इस पर निर्भर करता है: यदि आप पहले ए.एस. संपादित करते हैं, तो बिल्ड करें, फिर B.cs संपादित करें और फिर से बनाएं, इसे काम करना चाहिए। हालांकि मुझे 100% यकीन नहीं है कि बी.एस. के निर्माण से पहले DefineConstants को बदलते समय भी एसी को प्रभावित करेंगे - आप बस इसे निश्चित रूप से आजमा सकते हैं। – stijn

0

यह आप गुजर नहीं कर रहे हैं लगता है सशर्त संकलन प्रतीक। यही कारण है कि आप आउटपुट प्राप्त कर रहे हैं: कोई पर्यावरण प्रदान नहीं किया गया है। बस प्रोजेक्ट गुणों पर जाएं और बिल्ड टैब पर क्लिक करें (एप्लिकेशन के नीचे बाएं तरफ)। आपको सशर्त संकलन प्रतीक के लिए एक बॉक्स मिलेगा। बस अपने वांछित आउटपुट के अनुसार अपने स्थिरांक लिखें। पूर्व के लिए आपके उदाहरण में, "DEV" प्रिंट करने के लिए सशर्त संकलन बॉक्स पर DEV लिखें और अपनी प्रोजेक्ट का पुनर्निर्माण करें। मुझे यकीन है कि यह काम करेगा।

नोट: यदि आप अपने कोड के अनुसार किसी भी प्रतीक को पास करना चाहते हैं तो यह प्रिंट होगा: कोई पर्यावरण चयनित नहीं है।

+0

पुराने प्रश्न का उत्तर देते समय सतर्क रहें। यह 5 साल से अधिक पुराना है और इसका एक स्वीकार्य उत्तर है। यह वर्तमान में कुछ भी अतिरिक्त नहीं जोड़ता है। - [समीक्षा] से (https://stackoverflow.com/review) – Takarii

+0

हाय, यह सच है। लेकिन मैं यह जवाब क्यों डालता हूं, यह अन्य लोगों को एक ही प्रश्न की तलाश में मदद कर सकता है। –

संबंधित मुद्दे