2013-06-03 9 views
25

के साथ समाधान से एक वेब प्रोजेक्ट प्रकाशित करें मैं सर्वर के समाधान में वेब प्रोजेक्ट में से एक को तैनात करने की कोशिश कर रहा हूं। मैं TeamCity पर MSBuild का उपयोग कर तो जैसे हूँ:msbuild

msbuild MySolution.sln /t:WebSite:Rebuild /p:DeployOnBuild=True /p:PublishProfile=Prod ... 

हालांकि, जब मैं इसे चलाने के लिए, MSBuild अभी भी मेरे WebService परियोजना के निर्माण के लिए, भले ही मेरी WebSite परियोजना उस पर निर्भर नहीं करता है (की कोशिश करता है लेकिन यह एक Services पर निर्भर करता है समाधान में भी परियोजना)। केवल एक परियोजना, उर्फ ​​केवल WebSite प्रकाशित कैसे करें?

मैं भी

msbuild WebSite/WebSite.csproj /p:DeployOnBuild=True ... 

का उपयोग कर परियोजना फ़ाइल के निर्माण की कोशिश की है, लेकिन यह तो शिकायत है कि यह संकुल पुनर्स्थापित नहीं कर सकता:

[07:47:17]WebSite\WebSite.csproj.teamcity: Build target: Build 
[07:47:17][WebSite\WebSite.csproj.teamcity] RestorePackages 
[07:47:17][RestorePackages] Exec 
[07:47:17][Exec] C:\TeamCity\buildAgent\work\cab8a3d752df3a51\.nuget\NuGet.targets(90, 15): error MSB4064: The "LogStandardErrorAsError" parameter is not supported by the "Exec" task. Verify the parameter exists on the task, and it is a settable public instance property. 
[07:47:17][Exec] C:\TeamCity\buildAgent\work\cab8a3d752df3a51\.nuget\NuGet.targets(89, 9): error MSB4063: The "Exec" task could not be initialized with its input parameters. 
[07:47:17][WebSite\WebSite.csproj.teamcity] Project WebSite\WebSite.csproj.teamcity failed. 

जब मैं को निष्क्रिय NuGet पैकेज बहाल, CoreCompile (CSC) उन त्रुटियों में विफल रहता है जिनके बारे में मैंने कभी नहीं सुना है और नहीं होना चाहिए:

[07:54:43]WebSite\WebSite.csproj.teamcity: Build target: Build (13s) 
[07:54:55][WebSite\WebSite.csproj.teamcity] CoreCompile 
[07:54:55][CoreCompile] Csc 
[07:54:56][Csc] Areas\Api\Services\TripService.cs(19, 104): error CS0241: Default parameter specifiers are not permitted 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(11, 35): error CS1031: Type expected 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(11, 53): error CS1002: ; expected 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(16, 28): error CS1519: Invalid token '(' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(16, 37): error CS1519: Invalid token ',' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(17, 27): error CS1519: Invalid token '(' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(17, 32): error CS1519: Invalid token ')' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(23, 17): error CS1519: Invalid token 'for' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(23, 26): error CS1519: Invalid token '<=' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(23, 45): error CS1519: Invalid token '-' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(23, 51): error CS1519: Invalid token '++' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(24, 34): error CS0270: Array size cannot be specified in a variable declaration (try initializing with a 'new' expression) 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(24, 37): error CS1519: Invalid token '==' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(24, 51): error CS1519: Invalid token ')' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(24, 63): error CS1519: Invalid token '++' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(25, 41): error CS1519: Invalid token '>' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(25, 53): error CS1519: Invalid token ')' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(27, 36): error CS1519: Invalid token '=' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(27, 48): error CS1519: Invalid token ';' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(28, 36): error CS1519: Invalid token '=' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(29, 37): error CS1519: Invalid token '=' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(29, 48): error CS0270: Array size cannot be specified in a variable declaration (try initializing with a 'new' expression) 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(29, 50): error CS1519: Invalid token ';' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(30, 33): error CS1519: Invalid token '=' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(30, 44): error CS0270: Array size cannot be specified in a variable declaration (try initializing with a 'new' expression) 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(30, 50): error CS1519: Invalid token ';' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(32, 21): error CS0116: A namespace does not directly contain members such as fields or methods 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(35, 50): error CS1518: Expected class, delegate, enum, interface, or struct 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(38, 21): error CS0116: A namespace does not directly contain members such as fields or methods 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(40, 50): error CS1518: Expected class, delegate, enum, interface, or struct 
[07:54:56][Csc] Helpers\StatisticsUtility.cs(42, 21): error CS1022: Type or namespace definition, or end-of-file expected 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(8, 59): error CS1031: Type expected 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(8, 80): error CS1002: ; expected 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(10, 55): error CS1519: Invalid token '(' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(10, 60): error CS1520: Class, struct, or interface method must have a return type 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(10, 82): error CS1002: ; expected 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(13, 23): error CS1518: Expected class, delegate, enum, interface, or struct 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(15, 60): error CS1518: Expected class, delegate, enum, interface, or struct 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(18, 23): error CS1518: Expected class, delegate, enum, interface, or struct 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(20, 25): error CS1518: Expected class, delegate, enum, interface, or struct 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(23, 28): error CS1518: Expected class, delegate, enum, interface, or struct 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(26, 28): error CS1518: Expected class, delegate, enum, interface, or struct 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(29, 24): error CS1518: Expected class, delegate, enum, interface, or struct 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(29, 84): error CS1518: Expected class, delegate, enum, interface, or struct 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(32, 28): error CS1518: Expected class, delegate, enum, interface, or struct 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(35, 9): error CS1022: Type or namespace definition, or end-of-file expected 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(23, 26): error CS0101: The namespace '<global namespace>' already contains a definition for '?' 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(26, 26): error CS0101: The namespace '<global namespace>' already contains a definition for '?' 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(29, 22): error CS0101: The namespace '<global namespace>' already contains a definition for '?' 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(29, 83): error CS0101: The namespace '<global namespace>' already contains a definition for '?' 
[07:54:56][Csc] Helpers\UrlHelperExtensions.cs(32, 26): error CS0101: The namespace '<global namespace>' already contains a definition for '?' 
[07:54:56][Csc] Controllers\SessionController.cs(13, 51): error CS0241: Default parameter specifiers are not permitted 
[07:54:56][Csc] Helpers\JsonNetResult.cs(13, 44): error CS1031: Type expected 
[07:54:56][Csc] Helpers\JsonNetResult.cs(13, 72): error CS1041: Identifier expected, 'object' is a keyword 
[07:54:56][Csc] Helpers\JsonNetResult.cs(13, 91): error CS1002: ; expected 
[07:54:56][Csc] Helpers\JsonNetResult.cs(16, 38): error CS1519: Invalid token '=' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\JsonNetResult.cs(16, 59): error CS1519: Invalid token ';' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\JsonNetResult.cs(17, 64): error CS1519: Invalid token '=' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\JsonNetResult.cs(17, 90): error CS1519: Invalid token ';' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\JsonNetResult.cs(18, 32): error CS1519: Invalid token '=' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\JsonNetResult.cs(18, 46): error CS1519: Invalid token ';' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\JsonNetResult.cs(19, 33): error CS1519: Invalid token ';' in class, struct, or interface member declaration 
[07:54:56][Csc] Helpers\JsonNetResult.cs(22, 23): error CS1518: Expected class, delegate, enum, interface, or struct 
[07:54:56][Csc] Helpers\JsonNetResult.cs(25, 37): error CS1518: Expected class, delegate, enum, interface, or struct 
[07:54:56][Csc] Helpers\JsonNetResult.cs(32, 23): error CS1518: Expected class, delegate, enum, interface, or struct 
[07:54:56][Csc] Helpers\JsonNetResult.cs(35, 37): error CS1518: Expected class, delegate, enum, interface, or struct 
[07:54:56][Csc] Helpers\JsonNetResult.cs(40, 9): error CS1022: Type or namespace definition, or end-of-file expected 
[07:54:56][Csc] Mailers\ITripMailer.cs(13, 132): error CS0241: Default parameter specifiers are not permitted 
[07:54:56][Csc] Mailers\TripMailer.cs(54, 85): error CS0241: Default parameter specifiers are not permitted 
[07:54:56][Csc] Services\Impl\AuthorizationService.cs(12, 70): error CS0241: Default parameter specifiers are not permitted 
[07:54:56][Csc] Services\Impl\AuthorizationService.cs(43, 77): error CS0241: Default parameter specifiers are not permitted 
[07:54:56][WebSite\WebSite.csproj.teamcity] Project WebSite\WebSite.csproj.teamcity failed. 

उत्तर

48

मैं ब्लॉग कुछ महीने पहले http://sedodream.com/2013/03/06/HowToPublishOneWebProjectFromASolution.aspx पर इस बारे में ged। मैंने यहां विवरण भी कॉपी किए हैं, नीचे देखें। चहचहाना @nunofcosta पर


आज मुझे मोटे तौर पर प्रश्न पूछा "मैं एक समाधान है कि कई शामिल हैं से एक वेब प्रोजेक्ट प्रकाशित करते हैं?"

मुद्दा यह है कि वह में चल रहा है कि वह से बनाने जा रहा है है कमांड लाइन और msbuild.exe को निम्न गुणों को पास कर रहा है।

/p:DeployOnBuild=true 
/p:PublishProfile='siteone - Web Deploy' 
/p:Password=%password% 

आप कैसे http://sedodream.com/2013/01/06/CommandLineWebProjectPublishing.aspx पर प्रकाशन को स्वचालित करने के बारे में और अधिक पढ़ सकते हैं।

जब आप इन गुणों को msbuild.exe पर पास करते हैं तो उन्हें वैश्विक गुण के रूप में जाना जाता है। इन गुणों को ओवरराइड करना मुश्किल है और निर्मित हर परियोजना को पारित किया जाता है। इस वजह से यदि आपके पास एकाधिक वेब प्रोजेक्ट्स का समाधान है, तो जब प्रत्येक वेब प्रोजेक्ट बनाया जाता है तो यह गुणों के उसी सेट में पारित होता है। इस वजह से जब प्रत्येक प्रोजेक्ट का निर्माण किया जाता है, तो उस प्रोजेक्ट के लिए प्रकाशित प्रक्रिया शुरू हो जाएगी और यह साइटोन - वेब परिनियोजन.pubxml फ़ोल्डर * गुण \ PublishProfiles * में फ़ाइल ढूंढने की अपेक्षा करेगा। अगर फ़ाइल मौजूद नहीं है तो ऑपरेशन विफल हो सकता है।

नोट: यदि आप ऑर्केस्ट्रेटेड प्रकाशन के लिए इस तकनीक का उपयोग करने में रुचि रखते हैं तो ऐसा करने से पहले https://stackoverflow.com/a/14231729/105999 पर मेरी टिप्पणियां देखें।

तो हम इसे कैसे हल कर सकते हैं?

चलिए एक नमूना देखें (नीचे दिए गए लिंक देखें)। मेरे पास एक समाधान है, प्रकाशित परियोजनाओं के साथ प्रकाशित करें

  1. ProjA
  2. ProjB

ProjA नाम 'siteone - वेब तैनात' एक प्रकाशित प्रोफ़ाइल है, ProjB नहीं करता है।इसे प्रकाशित करने का प्रयास करते समय आप निम्न कमांड लाइन आज़मा सकते हैं।

msbuild.exe PublishOnlyOne.sln /p:DeployOnBuild=true /p:PublishProfile=’siteone – Web Deploy’ /p:Password=%password% 

नमूने में प्रकाशित-sln.cmd देखें।

आप ऐसा करते हैं, जब ProjB इसे बनाने की है, क्योंकि वहाँ कोई siteone असफल हो जायेगी के लिए अपने समय - कि इस परियोजना के लिए वेब तैनात प्रोफ़ाइल। इस वजह से, हम DeployOnBuild पास नहीं कर सकते हैं। इसके बजाय यहां हमें क्या करना है।

  1. संपादित ProjA.csproj एक और संपत्ति जो सशर्त है कि संपत्ति

मैं ProjA संपादित और में आयात बयान से पहले निम्न संपत्ति समूह जोड़ा में DeployOnBuild

  • सेट हो जाएगा कमांड लाइन पास से परिभाषित करने के लिए .csproj फ़ाइल।

    <PropertyGroup> 
    <DeployOnBuild Condition=" '$(DeployProjA)'!='' ">$(DeployProjA)</DeployOnBuild> 
    </PropertyGroup> 
    

    यहाँ आप देख सकते हैं कि जो कुछ भी DeployOnBuild मूल्य DeployProjA जब तक यह खाली नहीं है के रूप में है पर सेट है। अब संशोधित आदेश है:

    msbuild.exe PublishOnlyOne.sln /p:DeployProjA=true /p:PublishProfile=’siteone – Web Deploy’ /p:Password=%password% 
    

    बजाय DeployOnBuild पास करने का यहाँ, मैं DeployProjA में पारित जो तब DeployOnBuild सेट हो जाएगा। चूंकि DeployOnBuild ProjB को पास नहीं किया गया था, इसलिए इसे प्रकाशित करने का प्रयास नहीं किया जाएगा।

    आप https://github.com/sayedihashimi/sayed-samples/tree/master/PublishOnlyOne पर पूरा नमूना पा सकते हैं।

  • +0

    अच्छा writeup! यह निश्चित रूप से समझ में आता है। हालांकि, मैंने एसओ पर एक और प्रश्न के आधार पर एक एमएसबिल्ड फ़ाइल बनाकर अपनी समस्या को हल करना समाप्त कर दिया: http://stackoverflow.com/questions/3097489/how-to-publish-web-with-msbuild –

    +1

    यह एक बहुत ही चालाक उत्तर था , और मैं इसके लिए आपको बहुत धन्यवाद देना चाहता था।यह मेरे लिए एक गंभीर समस्या हल! –

    +0

    अद्भुत! यह वही है जो मुझे चाहिए और पूरी तरह से काम करता है, उत्तर और महान ब्लॉग पोस्ट –

    12

    इस के लिए बहुत आसान समाधान है। समाधान बनाने के दौरान एमएसबिल्ड एक परियोजना को लक्षित करने का समर्थन करता है। आप प्रोजेक्ट नाम को लक्ष्य पैरामीटर में डालकर ऐसा करते हैं। ध्यान दें कि यह समाधान में निर्दिष्ट प्रोजेक्ट का दृश्य नाम है (जरूरी नहीं कि .csproj फ़ाइल के नाम के समान)।

    नोट: यहां केवल "चाल" की आवश्यकता है अंडरस्कोर (_) के साथ प्रोजेक्ट नाम में बिंदुओं (।) को प्रतिस्थापित करें।

    उदाहरण MSBuild कमांड लाइन, अपनी परियोजना के नाम है अगर "Your.Project.Name":

    msbuild.exe YourSolutionName.sln /T:"Your_Poject_Name" /P:DeployOnBuild=true /P:PublishProfile=YourPublishProfile.pubxml 
    

    तुम भी है कि परियोजना के लिए एक निर्माण लक्ष्य को निर्दिष्ट कर सकता है, लेकिन इस लक्ष्य में सभी परियोजनाओं के लिए मौजूद होना चाहिए समाधान:

    msbuild.exe YourSolutionName.sln /T:"Your_Poject_Name:Rebuild" /P:DeployOnBuild=true /P:PublishProfile=YourPublishProfile.pubxml 
    

    सूत्रों का कहना है

    1. गु प्रतिस्थापन चाल ओर इशारा करते हुए के लिए वसिल Trifonov को https://msdn.microsoft.com/en-us/library/ms164311(v=vs.140).aspx
    2. विशेष धन्यवाद: आंशिक रूप से के बाद से विजुअल स्टूडियो 2008 MSDN में प्रलेखित है है http://www.codeproject.com/Articles/654910/How-to-build-a-specific-project-from-a-solution-wi
    +0

    यह काम करता है, लेकिन वेब प्रोजेक्ट की सभी निर्भरताओं को बनाने के लिए प्रतीत नहीं होता है। मैंने क्लास लाइब्रेरी को संदर्भित करके और फिर msbuild कमांड चलाकर इसका परीक्षण किया। यह कहने में गलती हुई कि पुस्तकालय नहीं मिला। – Remotec

    +0

    यह काम करना चाहिए क्योंकि हम इस तकनीक का उपयोग serveral सीआई कॉन्फ़िगरेशन (VS2015) में कर रहे हैं। सुनिश्चित करें कि आपकी कक्षा लाइब्रेरी संबंधित समाधान कॉन्फ़िगरेशन के तहत "बिल्ड" पर सेट है (जो बदले में प्रकाशित प्रोफ़ाइल में चयनित है)। – arni

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