2012-08-02 21 views
10

मैं MSBuild फ़ाइल से MSBuildTasks को संदर्भित करने का प्रयास कर रहा हूं, और मुझे यह सुनिश्चित नहीं है कि MSBuildTasks के लिए NuGet का उपयोग करते समय यह कैसे करें।Nuget पैकेज से MSBuildTasks को संदर्भित करना

संदर्भ

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/> 

उपयोग करने के लिए जब आप MSI फ़ाइल का उपयोग MSBuildTasks स्थापित किया है कहते हैं। हालांकि, NuGet से इंस्टॉल करते समय यह एक उपफोल्डर में रखता है जिसमें संस्करण होता है, इसलिए यदि मैं MSBuildTasks को अपग्रेड करता हूं तो यह बिल्ड फ़ाइल में पथ को तोड़ देगा। NuGet के माध्यम से स्थापित होने पर MSBuildTasks को संदर्भित करने का सबसे अच्छा तरीका क्या है?

उत्तर

6

मैंने हाल ही में MSBuildTasks संस्करण 1.4.0.45 का उपयोग कर resourcelib, के लिए इसे सेट अप किया है। इस संस्करण में इसे परियोजना में जोड़ने के परिणामस्वरूप डीएलएल को "बिल्ड" उपनिर्देशिका में रखा गया था, ऐसा लगता है कि आपको चेक इन करने की आवश्यकता है। मैंने इसे ऑटो-डाउनलोड करने की कोशिश की, लेकिन अगर इसे किसी प्रोजेक्ट फ़ाइल में संदर्भित किया गया है तो उसे इसकी आवश्यकता है शुरुआत से वहाँ रहो।

<PropertyGroup> 
    <MSBuildCommunityTasksPath>$(MSBuildProjectDirectory)\Build</MSBuildCommunityTasksPath> 
</PropertyGroup> 
<Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets"/> 

यहाँ MSBuildProjectDirectory किया जा रहा है तो यह कमांड लाइन पर MSBuild के साथ बनाया जा सकता है:

परियोजना के लिए इसे जोड़ने के लिए, मैं निम्नलिखित कोड का इस्तेमाल किया।

+3

यह उत्तर बहुत उपयोगी था, लेकिन मैंने पाया कि निर्देशिका जहां NuGet लक्ष्य फ़ाइल रखती है वर्तमान में है: '$ (SolutionDir) \। Build', इसलिए यदि उपर्युक्त सेटिंग्स काम नहीं करती हैं, तो मैं उत्तर को अपडेट करने की अनुशंसा करता हूं निम्न सेट करें: ' $ (SolutionDir) \। build ' – providencemac

+2

यह NuGet पैकेज में PowerShell स्क्रिप्ट दिखाई देता है जो' 1.5 बिल्डर फ़ोल्डर को संस्करण 1.5 के बाद हटा दिया गया है, फिर भी' प्रारंभ करना गाइड अभी भी इसका उपयोग करने का सुझाव देता है। मैंने एक [मुद्दा] उठाया है (https://github.com/loresoft/msbuildtasks/issues/258)। – Neo

5

किसी और को इस मुद्दे का सामना करने के मामले में बस इसे यहां फेंक दें। ऐसा लगता है कि जब आप NuGet के माध्यम से MSBuildCommunityTasks को स्थापित करते हैं, तो समाधान में एक .build फ़ोल्डर जोड़ा जाता है, जिसे स्रोत कोड के साथ चेक-इन करने की अनुशंसा की जाती है। हालांकि, MSBuild.Community.Tasks.targets फ़ाइल में <MSBuildCommunityTasksPath> तत्व है, जो c: \ Program Files (x86) फ़ोल्डर को इंगित करता है, जो गलत है। जब आप एमएसआई का उपयोग कर एमएसबिल्ड कम्युनिटी टास्क स्थापित करते हैं तो यह फ़ोल्डर मान्य होता है। यह Nuget के मामले में अमान्य है, जो आपके समाधान के संकुल फ़ोल्डर में MsBuildCommunityTasks स्थापित करता है। इसलिए मैं .targets फ़ाइल को संशोधित करने के समाप्त हो गया है, और करने के लिए बात करने के लिए MSBuildCommunityTasksPath बदल दिया है:

<MSBuildCommunityTasksPath>$(SolutionDir)\packages\MSBuildTasks.1.4.0.56\tools</MSBuildCommunityTasksPath> 

फिर भी कोई पासा। तो अंत में, मैं सिर्फ वेब प्रोजेक्ट फाइल द्वारा संपादित, और यह करने के लिए MSBuildCommunityTasks के लिए आयात तत्व बदल दिया है:

<Import Project="$(SolutionDir)\packages\MSBuildTasks.1.4.0.56\tools\MSBuild.Community.Tasks.Targets"/> 

यह काम करता है, के बाद से यह सीधे परियोजना संकुल फ़ोल्डर में .Targets फ़ाइल देखने के लिए कहता है। ध्यान रखें, अगर आप MSBuildTasks संस्करण को अपग्रेड करते हैं, तो आपको आयात तत्व को बदलना होगा। मैं एक एमएसबिल्ड नोब हूं, इसलिए यदि कोई मुझे बता सकता है कि इसे कैसे स्वचालित किया जाए, तो यह बहुत अच्छा होगा!

+0

क्यों नहीं <<आयात परियोजना = "$ (MSBuildCommunityTasksPath) \ MSBuild.Community.Tasks" /> '? शायद आपके जवाब में ओवरसइट। – HankCa

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