वीसी ++ परियोजनाओं के लिए यह थोड़ा अलग है। आप या तो शुरुआत में या परियोजना के अंत में आयात करने के लिए एक फ़ाइल को परिभाषित करते हैं। इस दृष्टिकोण का उपयोग करने के लिए आपको ForceImportBeforeCppTargets
या ForceImportAfterCppTargets
गुणों के मानों को परिभाषित करने की आवश्यकता है। उदाहरण के लिए यदि आप प्रोजेक्ट की शुरुआत में फ़ाइल को शामिल करना चाहते हैं तो आप कमांड लाइन पर मान में पास कर सकते हैं। उदाहरण के लिए मैंने अभी एक डमी वीसी ++ परियोजना बनाई जिसे CppTets01 नाम दिया गया है। फिर मैंने नीचे दो नमूना फाइलें बनाईं।
msbuild CppTest01.vcxproj
/p:ForceImportBeforeCppTargets="C:\Temp\_NET\ThrowAway\CppTest01\CppTest01\Before.proj";
ForceImportAfterCppTargets="C:\Temp\_NET\ThrowAway\CppTest01\CppTest01\After.proj"
परिणाम था:
Before.proj
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="CustomTargetInBefore" AfterTargets="Build">
<Message Text="From CustomTargetInBefore" Importance="high"/>
</Target>
</Project>
After.proj
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="CustomTargetInAfter" AfterTargets="Build">
<Message Text="From CustomTargetInAfter" Importance="high"/>
</Target>
</Project>
तो मैं निम्न आदेश निष्पादित C: \ Temp_NET \ throwaway \ CppTest01 \ CppTest01> MSBuild CppTest01.vcxproj/p: ForceImportBeforeCppTargets = "C: \ Temp_NET \ throwaway \ CppTest01 \ सी ppTest01 \ Before.proj"; ForceImportAfterCppTargets = "C: \ Temp_NET \ throwaway \ CppTest01 \ CppTest01 \ After.proj "
Microsoft (R) Build Engine Version 4.0.30319.1
[Microsoft .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation 2007. All rights reserved.
Build started 10/18/2010 8:32:55 AM.
Project "C:\Temp\_NET\ThrowAway\CppTest01\CppTest01\CppTest01.vcxproj" on node 1 (default targets).
InitializeBuildStatus:
Creating "Debug\CppTest01.unsuccessfulbuild" because "AlwaysCreate" was specified.
ClCompile:
All outputs are up-to-date.
All outputs are up-to-date.
ManifestResourceCompile:
All outputs are up-to-date.
Link:
All outputs are up-to-date.
Manifest:
All outputs are up-to-date.
FinalizeBuildStatus:
Deleting file "Debug\CppTest01.unsuccessfulbuild".
Touching "Debug\CppTest01.lastbuildstate".
CustomTargetInBefore:
From CustomTargetInBefore
CustomTargetInAfter:
From CustomTargetInAfter
Done Building Project "C:\Temp\_NET\ThrowAway\CppTest01\CppTest01\CppTest01.vcxproj" (default targets).
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:00.21
आप उत्पादन से देख सकते हैं लक्ष्य सफलतापूर्वक निर्माण प्रक्रिया में इंजेक्ट किया गया था। यदि आप इसे Custom.Before.Microsoft.Common.targets
और Custom.Before.Microsoft.Common.targets
पर वापस जोड़ना चाहते हैं तो आपको पता होना चाहिए कि वहां उपयोग की जाने वाली तकनीक थोड़ा अलग है। विशेष रूप से यदि आप उन फ़ाइलों को बनाते हैं तो वे स्वचालित रूप से प्रत्येक सी #/वीबी.नेट परियोजना में आयात किए जाते हैं। इस मामले में आपको यह संपत्ति सेट करनी होगी। आप वास्तव में यहाँ दो विकल्प हैं:
- आप एक ऐसे वातावरण चर के रूप में इस संपत्ति सेट कर सकते हैं
- आप किसी अन्य तकनीक, ImportBefore & ImportAfter जो कुलपति ++
के लिए विशिष्ट है का उपयोग कर सकते # 1 के लिए मुझे थोड़ा सा समझाओ।MSBuild में आप वाक्य रचना $ (PropName) के साथ एक संपत्ति पर पहुंचते तो अगर नाम के साथ एक संपत्ति PropName MSBuild मौजूद नहीं है अगर इस तरह के एक मूल्य मौजूद है को देखने के लिए, अगर यह तो है कि मूल्य दिया जाता है करता है वातावरण चर में दिखेगा । इसलिए यदि आपके पास एक बिल्ड सर्वर है जिसमें आप प्रत्येक वीसी ++ बिल्ड के लिए फ़ाइल शामिल करना चाहते हैं, तो बस उन गुणों को पर्यावरण चर के रूप में बनाएं। अब दूसरी तकनीक के लिए।
आयात से पहले/आयात करें वीसी ++ में एक नई अवधारणा पेश की गई है। Microsoft.Cpp.Win32.targets में आप .targets फ़ाइल के शीर्ष पर घोषणा देख सकते हैं।
<Import Project="$(VCTargetsPath)\Platforms\Win32\ImportBefore\*.targets"
Condition="Exists('$(VCTargetsPath)\Platforms\Win32\ImportBefore')" />
तो फिर वहाँ नीचे
<Import Project="$(VCTargetsPath)\Platforms\Win32\ImportAfter\*.targets"
Condition="Exists('$(VCTargetsPath)\Platforms\Win32\ImportAfter')" />
ऐसा ही एक आयात घोषणा के रूप में अच्छी तरह से अन्य लक्ष्य प्लेटफार्मों के लिए मौजूद है की दिशा में एक है। विशिष्ट नामों के लिए %ProgramFiles32%\MSBuild\Microsoft.Cpp\v4.0\Platforms\
पर फ़ाइलों को देखें।
इस तकनीक अगर आप चाहते हैं एक फ़ाइल तो बस एक फ़ाइल है कि
.targets
साथ समाप्त होता है और उचित फ़ोल्डर में जगह बनाने के आयात करने के लिए के साथ
। इसका लाभ यह है कि इसे उस प्लेटफॉर्म के लिए प्रत्येक वीसी ++ बिल्ड में आयात किया जाएगा, और आप कई अलग-अलग फाइलें बना सकते हैं। दोष यह है कि आपको उन्हें उन विशिष्ट फ़ोल्डर्स में रखना होगा। दोनों तकनीकों के बीच यह मुख्य अंतर है। इस पहली तकनीक के साथ आप संपत्ति के माध्यम से फ़ाइल स्थान निर्दिष्ट कर सकते हैं और इसे प्रत्येक बिल्ड के लिए स्वचालित रूप से शामिल नहीं किया गया है, लेकिन दूसरे दृष्टिकोण के लिए यह है कि आप स्थान
आप घटनाक्रम बिल्ड + पूर्व-निर्माण घटना और घटना के बाद बिल्ड सेटिंग्स क्यों उपयोग नहीं कर रहे? –
हम बिल्ड सर्वर से संस्करण जानकारी (और अन्य जानकारी) है प्रयोग नहीं कर रहे पूर्व/पोस्ट घटनाओं का निर्माण क्योंकि वे हमेशा क्रियान्वित कर रहे हैं, हम कुछ है कि केवल तब चलता है जब buildserver पर निर्माण करना चाहते हैं और यह भी मिलता है। इसके अलावा हम एक डेवलपर इन घटना सेटिंग में कुछ डाल करने के लिए भूल जाता है या नहीं, पर निर्भर होना नहीं चाहते हैं, यह स्वत: और 'Custom.Before.Microsoft.Common.targets' प्रदान करता है कि लेकिन मूल कोड के लिए जाहिरा तौर पर नहीं होना चाहिए। – Halt