Msbuild के साथ वेब कैसे प्रकाशित करें?


216

विजुअल स्टूडियो 2010 में एक पब्लिश कमांड है जो आपको अपने वेब एप्लिकेशन प्रोजेक्ट को फाइल सिस्टम लोकेशन पर प्रकाशित करने की अनुमति देता है। मैं अपने TeamCity बिल्ड सर्वर पर ऐसा करना चाहता हूं, इसलिए मुझे इसे समाधान धावक या msbuild के साथ करने की आवश्यकता है। मैंने प्रकाशित लक्ष्य का उपयोग करने की कोशिश की, लेकिन मुझे लगता है कि ClickOnce के लिए यह हो सकता है:

msbuild Project.csproj /t:Publish /p:Configuration=Deploy

मैं मूल रूप से वही करना चाहता हूं जो वेब परिनियोजन प्रोजेक्ट करता है, लेकिन ऐड-इन के बिना। मुझे वैप को संकलित करने, निष्पादन के लिए अनावश्यक किसी भी फाइल को हटाने, किसी भी वेब.कॉन्फ़िग ट्रांसफ़ॉर्मेशन को करने और आउटपुट को एक निर्दिष्ट स्थान पर कॉपी करने की आवश्यकता है।

मेरा समाधान , जेफ सिवर के जवाब पर आधारित है

<Target Name="Deploy">
    <MSBuild Projects="$(SolutionFile)" 
             Properties="Configuration=$(Configuration);DeployOnBuild=true;DeployTarget=Package" 
             ContinueOnError="false" />
    <Exec Command="&quot;$(ProjectPath)\obj\$(Configuration)\Package\$(ProjectName).deploy.cmd&quot; /y /m:$(DeployServer) -enableRule:DoNotDeleteRule" 
          ContinueOnError="false" />
</Target>


@SnOrfus मैं वर्तमान में VS 2008 में वेब परिनियोजन प्रोजेक्ट्स का उपयोग कर रहा हूं (जैसा कि मैंने उस प्रश्न के उत्तर में उल्लेख किया है), लेकिन मैं इसके बजाय VS 2010 की प्रकाशित सुविधा को स्वचालित करने का प्रयास करना चाहूंगा।
jrummell

यह सवाल उपयोगी लग रहा है stackoverflow.com/questions/1983575/...
jrummell

2
अपनी स्क्रिप्ट में केवल एक छोटा संशोधन: आप तैनाती स्क्रिप्ट के लिए $ (ProjectPath) का उपयोग कर रहे हैं, लेकिन आप वास्तव में $ चाहते हैं (ProjectDir) अन्यथा आप .csproj \ obj के साथ समाप्त होते हैं
ट्रॉय हंट

2
VS2012 से शुरू करना, यह बहुत आसान है: stackoverflow.com/a/13947667/270348
RobSiklos

जवाबों:


137

मैं इसे ज्यादातर एक कस्टम msbuild स्क्रिप्ट के बिना काम कर रहा है। यहाँ प्रासंगिक टीम बिल्ड बिल्ड कॉन्फ़िगरेशन सेटिंग्स हैं:

विरूपण साक्ष्य पथ:% system.teamcity.build.workingDir% \ MyProject \ obj \ Debug \ Package \ पैकेजTmp 
धावक का प्रकार: MSBuild (MSBuild फ़ाइलों के लिए धावक) 
फ़ाइल पथ बनाएँ: MyProject \ MyProject.csproj 
कार्य निर्देशिका: चेकआउट निर्देशिका के समान 
MSBuild संस्करण: Microsoft .NET ढाँचा 4.0 
MSBuild ToolsVersion: 4.0 
रन प्लेटफॉर्म: x86 
लक्ष्य: पैकेज 
MSBuild.exe को कमांड लाइन पैरामीटर: / p: कॉन्फ़िगरेशन = डीबग

यह संकलन, पैकेज (web.config परिवर्तन के साथ) करेगा, और आउटपुट को कलाकृतियों के रूप में बचाएगा। केवल एक चीज गायब है जो किसी निर्दिष्ट स्थान पर आउटपुट की प्रतिलिपि बना रही है, लेकिन यह या तो किसी अन्य TeamCity बिल्ड कॉन्फ़िगरेशन में आर्टिफिशियल निर्भरता या एक msbuild स्क्रिप्ट के साथ किया जा सकता है।

अपडेट करें

यहाँ एक msbuild स्क्रिप्ट है जो संकलन, पैकेज (web.config परिवर्तन के साथ) करेगा, और आउटपुट को मेरे स्टेजिंग सर्वर पर कॉपी करेगा

<?xml version="1.0" encoding="utf-8" ?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
        <SolutionName>MySolution</SolutionName>
        <SolutionFile>$(SolutionName).sln</SolutionFile>
        <ProjectName>MyProject</ProjectName>
        <ProjectFile>$(ProjectName)\$(ProjectName).csproj</ProjectFile>
    </PropertyGroup>

    <Target Name="Build" DependsOnTargets="BuildPackage;CopyOutput" />

    <Target Name="BuildPackage">
        <MSBuild Projects="$(SolutionFile)" ContinueOnError="false" Targets="Rebuild" Properties="Configuration=$(Configuration)" />
        <MSBuild Projects="$(ProjectFile)" ContinueOnError="false" Targets="Package" Properties="Configuration=$(Configuration)" />
    </Target>

    <Target Name="CopyOutput">
        <ItemGroup>
            <PackagedFiles Include="$(ProjectName)\obj\$(Configuration)\Package\PackageTmp\**\*.*"/>
        </ItemGroup>
        <Copy SourceFiles="@(PackagedFiles)" DestinationFiles="@(PackagedFiles->'\\build02\wwwroot\$(ProjectName)\$(Configuration)\%(RecursiveDir)%(Filename)%(Extension)')"/>
    </Target>
</Project>

आप PropertyGroup टैग से SolutionName और ProjectName गुण भी निकाल सकते हैं और उन्हें msbuild को पास कर सकते हैं।

msbuild build.xml /p:Configuration=Deploy;SolutionName=MySolution;ProjectName=MyProject

अपडेट २

चूँकि यह प्रश्न अभी भी ट्रैफ़िक का एक अच्छा सौदा है, मुझे लगा कि यह मेरे वर्तमान स्क्रिप्ट के साथ मेरे उत्तर को अपडेट करने लायक था जो वेब डिप्लॉय (जिसे MSDeploy के रूप में भी जाना जाता है) का उपयोग करता है ।

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build" ToolsVersion="4.0">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
    <ProjectFile Condition=" '$(ProjectFile)' == '' ">$(ProjectName)\$(ProjectName).csproj</ProjectFile>
    <DeployServiceUrl Condition=" '$(DeployServiceUrl)' == '' ">http://staging-server/MSDeployAgentService</DeployServiceUrl>
  </PropertyGroup>

  <Target Name="VerifyProperties">
    <!-- Verify that we have values for all required properties -->
    <Error Condition=" '$(ProjectName)' == '' " Text="ProjectName is required." />
  </Target>

  <Target Name="Build" DependsOnTargets="VerifyProperties">
    <!-- Deploy using windows authentication -->
    <MSBuild Projects="$(ProjectFile)"
             Properties="Configuration=$(Configuration);
                             MvcBuildViews=False;
                             DeployOnBuild=true;
                             DeployTarget=MSDeployPublish;
                             CreatePackageOnPublish=True;
                             AllowUntrustedCertificate=True;
                             MSDeployPublishMethod=RemoteAgent;
                             MsDeployServiceUrl=$(DeployServiceUrl);
                             SkipExtraFilesOnServer=True;
                             UserName=;
                             Password=;"
             ContinueOnError="false" />
  </Target>
</Project>

TeamCity में, मेरे पास नामांकित पैरामीटर हैं env.Configuration, env.ProjectNameऔर env.DeployServiceUrl। MSBuild धावक का निर्माण फ़ाइल पथ है और पैरामीटर स्वचालित रूप से पारित हो जाते हैं (आपको उन्हें कमांड लाइन मापदंडों में निर्दिष्ट करने की आवश्यकता नहीं है)।

आप इसे कमांड लाइन से भी चला सकते हैं:

msbuild build.xml /p:Configuration=Staging;ProjectName=MyProject;DeployServiceUrl=http://staging-server/MSDeployAgentService

2
धन्यवाद - यह सीधे पॉवरशेल से भी अच्छा काम करता है (स्वरूपण के लिए माफी - टिप्पणियों में कोई गाड़ी नहीं लौटती है): और "$ समाधान" / p: "कॉन्फ़िगरेशन = $ कॉन्फ़िगरेशन" का निर्माण करें; & msbuild "$ परियोजना" / t: पैकेज / पी: "कॉन्फ़िगरेशन = $ कॉन्फ़िगरेशन; _PackageTempDir = $ outputfolder"
zcrar70

मैंने आपके पहले अपडेट से उदाहरण की कोशिश की और ऐसा लगता है कि यह Packageलक्ष्य वेबडाइप पर भी निर्भर करता है: error : Package/Publish task Microsoft.Web.Publishing.Tasks.IsCleanMSDeployPackageNeeded failed to load Web Deploy assemblies. Microsoft Web Deploy is not correctly installed on this machine.(इसका उल्लेख करते हुए जब से आप लिखते हैं कि आपका दूसरा अपडेट WebDeploy का उपयोग करता है, जो संभवतः पहले WebDeploy का उपयोग नहीं करेगा।
chiccodoro

@jrummell: मैं अपने विजुअल स्टूडियो वेब प्रोजेक्ट को TeamCity के रिमोट विंडोज सर्वर पर तैनात करना चाहता हूं। मुझे क्या करना चाहिए। मैं एक शुरुआती हूं और मुझे इस बारे में कोई जानकारी नहीं है कि क्या करना है
नीविन राज विक्टर

1
मैं वेब एप्लिकेशन प्रोजेक्ट्स के साथ TeamCity पर काम करने के लिए इसे प्राप्त करने में सक्षम हूं, लेकिन मेरे पास एक विरासत बाध्य वेबसाइट परियोजना है जिसे मुझे भी प्रकाशित करना होगा (एक पैकेज के रूप में) फिर MSDeploy का उपयोग करने की आवश्यकता है। यदि मैं VS2013 के भीतर प्रकाशित करता हूं तो मुझे एक तैनाती पैकेज मिलता है, लेकिन cmd लाइन से MSBuild एक नहीं बनाता है। कोई विचार?
नॉर्थहॉवल्स

1
मुझे इसमें प्रकाशित प्रोफ़ाइल का कोई उल्लेख नहीं दिखाई देता है। प्रकाशित प्रोफ़ाइल को निर्दिष्ट किया जाना चाहिए ताकि सही web.config रूपांतरण लागू हो। अपडेट: नेवरमाइंड ... इस फीचर को इस पोस्ट के 2 साल बाद पेश किया गया था। यह अभी भी शायद काम करता है। बाद में इस थ्रेड में पोस्ट दिखाता है कि कमांड लाइन से प्रकाशित प्रोफ़ाइल के साथ कैसे प्रकाशित किया जाए।
त्रिनको

84

वीएस 2012 में शुरू की गई तैनाती प्रोफाइल का उपयोग करके, आप निम्नलिखित कमांड लाइन के साथ प्रकाशित कर सकते हैं:

msbuild MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=<profile-name> /p:Password=<insert-password> /p:VisualStudioVersion=11.0

मापदंडों पर अधिक जानकारी के लिए इसे देखें

/p:VisualStudioVersionपैरामीटर के मान आपके विजुअल स्टूडियो के संस्करण पर निर्भर करते हैं। विकिपीडिया में विजुअल स्टूडियो रिलीज़ और उनके संस्करणों की एक तालिका है


6
VS2012 .NET 3.5 का उपयोग करते हुए, यह फ़ाइल सिस्टम पर तैनाती के लिए काम नहीं करता था। यह बस बनाता है और कोई तैनाती नहीं करता है।
जय सुलिवन

2
आपके /p:VisualStudioVersion=11.0 ने मेरी जान बचाई। मैं vs2013 के लिए /p:VisualStudioVersion=12.0 का उपयोग करता हूं और यह ठीक काम करता है।
सैयद मोर्तेजा मुसावी

/p:VisualStudioVersion=?वीएस 2017 के लिए मूल्य क्या होगा ?
निशांत

निर्मित स्क्रिप्ट का निर्माण msbuild test.sln /p:DeployOnBuild=True /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl=.\build_output1\pub /p:PublishProfile=FolderProfile /p:VisualStudioVersion=11.0 /p:outdir=.\build_output1 ...... लेकिन अभी भी केवल DLL को सभी फ़ाइलों को प्रकाशित फ़ोल्डर में नहीं मिल रहा है: (`
निशांत

@ निशांत वीएस 2017 के लिए, उपयोग करें /p:VisualStudioVersion=15। मुझे यकीन नहीं है कि यह आपकी फ़ाइल की नकल के मुद्दे से संबंधित है।
क्रिस

38

मैं इस तरह के समाधान के साथ आया, मेरे लिए बहुत अच्छा काम करता है:

msbuild /t:ResolveReferences;_WPPCopyWebApplication /p:BuildingProject=true;OutDir=C:\Temp\build\ Test.csproj

गुप्त सॉस _WPPCopyWebApplication लक्ष्य है।


1
_WPPCopyWebApplication क्या है और मैं इसे कैसे एक्सएमएल कॉन्फ़िग फ़ाइल / MSBbuild उपयोग कर सकते हैं
Johnny_D

4
VS2012 .NET 3.5 का उपयोग करते हुए, मुझे त्रुटि मिली error MSB4057: The target "_WPPCopyWebApplication" does not exist in the project। उस हिस्से को बाहर निकालने के लिए बिना किसी विचार को तैनात करने के लिए एक तैनाती का नेतृत्व किया
जे सुलिवन

आपको इसे किसी भिन्न / p:VisualStudioVersion=12.0 के साथ कॉल करने की आवश्यकता हो सकती है क्योंकि बिल्ड c: \ program files (x86) \ msbuild \ microsoft \ Visualstudio \ VERSION \ Webapplication / Microsoft.ebApplication.targets से लक्ष्यों का उपयोग करता है इसलिए शायद इसका उपयोग कर रहा है पुराने संस्करण में सही लक्ष्य नहीं है।
जिम वोल्फ

@FRoZeN मैंने MSBuild का उपयोग करने की कोशिश की MSBuild.exe C:\BuildAgent\work\4c7b8ac8bc7d723e\WebService.sln /p:Configuration=Release /p:OutputPath=bin /p:DeployOnBuild=True /p:DeployTarget=MSDeployPublish /p:MsDeployServiceUrl=https://204.158.674.5/msdeploy.axd /p:username=Admin /p:password=Password#321 /p:AllowUntrustedCertificate=True /p:DeployIisAppPath=Default WebSite/New /p:MSDeployPublishMethod=WMSVC। यह मुझे एक त्रुटि देता है MSBUILD : error MSB1008: Only one project can be specified. Switch: WebSite/New। क्या इसका कोई समाधान है?
नेविन राज विक्टर

1
@NevinRajVictor त्रुटि है कि संभावना है क्योंकि आपके पास DeployIisAppPath मान में एक स्थान है। आपको मानों को उद्धरणों में रखना होगा। उदा / p: DeployIisAppPath = "डिफ़ॉल्ट वेबसाइट / नया"
shiitake

27

मुझे टीमकिटी का पता नहीं है इसलिए मुझे उम्मीद है कि यह आपके लिए काम कर सकती है।

ऐसा करने का सबसे अच्छा तरीका है MSDeploy.exe। यह Microsoft द्वारा संचालित WebDeploy प्रोजेक्ट का हिस्सा है। आप यहाँ बिट्स डाउनलोड कर सकते हैं

WebDeploy के साथ, आप कमांड लाइन चलाते हैं

msdeploy.exe -verb:sync -source:contentPath=c:\webApp -dest:contentPath=c:\DeployedWebApp

यह वीएस पब्लिश कमांड के समान ही काम करता है, केवल आवश्यक बिट्स को परिनियोजन फ़ोल्डर में कॉपी करता है।


यह आशाजनक लग रहा है। हालांकि, ऐसा लगता है कि प्रबंधन सेवा केवल सर्वर 2008 पर उपलब्ध है। मेरा स्टेजिंग सर्वर (जहां मैं तैनाती को स्वचालित करना चाहता हूं) विंडोज 7 प्रो चला रहा हूं।
jrummell

2
उत्पाद के दो टुकड़े हैं। IIS में सही एकीकृत होने वाले टुकड़ों को सर्वर 2008 की आवश्यकता होती है। कमांड लाइन घटक में वह आवश्यकता नहीं होती है; मेरे पास यह एक सर्वर 2003 बॉक्स पर चल रहा है जिसे मैं तैनाती के लिए उपयोग करता हूं।
जेफ सिवर

मैंने MSDeploy पर कुछ पढ़ने के लिए किया है। मैंने इसे स्थापित किया और अपने स्टेजिंग सर्वर पर काम कर रहा था, धन्यवाद! क्या मैं MSBuild स्क्रिप्ट से MSDeploy चला सकता हूं?
jrummell

1
वीएस पब्लिश कमांड के विन्यास के रूप में एक ही बात करता है? कौन सी प्रकाशन विधि - फाइल सिस्टम या अन्य? क्या यह निर्धारित करने के लिए कि कौन सी फ़ाइलों को कॉपी करना है, यह MyProject.Publish.xml फ़ाइल का उपयोग करता है?
एंथोनी

1
मैंने इसे सिर्फ एक शॉट दिया लेकिन यह वीएस पब्लिश के समान नहीं था। यह सभी स्रोत फ़ाइलों सहित XCopy के समान ही था।
लुई सोमरस

13

VisualStudio 2012 के साथ प्रकाशित प्रोफ़ाइल के बिना सबज को संभालने का एक तरीका है। आप मापदंडों का उपयोग करके आउटपुट फ़ोल्डर पास कर सकते हैं। यह 'publishUrl' पैरामीटर में निरपेक्ष और सापेक्ष पथ के साथ काम करता है। आप VS100COMNTOOLS का उपयोग कर सकते हैं, हालांकि आपको लक्ष्य 'वेबप्रकाश' का उपयोग करने के लिए VisualStudioVersion को ओवरराइड करने की आवश्यकता है %ProgramFiles%\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets। VisualStudioVersion 10.0 के साथ यह स्क्रिप्ट बिना किसी आउटपुट के सफल होगी :)

अद्यतन: मैं इस विधि का उपयोग करने के लिए सिर्फ विंडोज एसडीके 7.1 स्थापित (एक मशीन पर कोई दृश्य स्टूडियो 2010 और 2012 नहीं) के साथ एक बिल्ड सर्वर पर उपयोग करने में कामयाब रहा। लेकिन मुझे इसे काम करने के लिए इन चरणों का पालन करना पड़ा:

  1. Simmo उत्तर ( https://stackoverflow.com/a/2907056/2169198 ) का उपयोग करके मशीन पर विंडोज एसडीके 7.1 करेंट बनाएं
  2. रजिस्ट्री कुंजी HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ VisualStudio \ SxS \ VS7 \ 10.0 को "C: \ Program Files \ Microsoft Visual Studio 10.0 \" सेट करना (उपयुक्त रूप में अपने पथ का उपयोग करें)
  3. फोल्डर बनाने के लिए मेरे डेवलपर मशीन से फोल्डर% ProgramFiles% \ MSBuild \ Microsoft \ VisualStudio \ v11.0 की प्रतिलिपि बनाना

स्क्रिप्ट:

set WORK_DIR=%~dp0
pushd %WORK_DIR%
set OUTPUTS=%WORK_DIR%..\Outputs
set CONFIG=%~1
if "%CONFIG%"=="" set CONFIG=Release
set VSTOOLS="%VS100COMNTOOLS%"
if %VSTOOLS%=="" set "PATH=%PATH%;%WINDIR%\Microsoft.NET\Framework\v4.0.30319" && goto skipvsinit
call "%VSTOOLS:~1,-1%vsvars32.bat"
if errorlevel 1 goto end
:skipvsinit
msbuild.exe Project.csproj /t:WebPublish /p:Configuration=%CONFIG% /p:VisualStudioVersion=11.0 /p:WebPublishMethod=FileSystem /p:publishUrl=%OUTPUTS%\Project
if errorlevel 1 goto end
:end
popd
exit /b %ERRORLEVEL%

इस समाधान के लिए धन्यवाद - यह वही है जिसकी मैं तलाश कर रहा था: फ़ाइल सिस्टम परिनियोजन के साथ वेबप्रकाश विकल्प।
वूहो

12

दो अलग-अलग समाधान मिले जो थोड़े अलग तरीके से काम करते हैं:

1. यह समाधान एलेक्सेंडरब [लिंक] के उत्तर से प्रेरित है । दुर्भाग्य से यह हमारे काम नहीं आया - कुछ डीएल की आउटडिर की नकल नहीं की गई। हमें पता चला कि लक्ष्य के ResolveReferencesसाथ प्रतिस्थापित Buildकरने से समस्या हल हो गई है - अब सभी आवश्यक फाइलों को आउटडिर स्थान पर कॉपी किया गया है।

msbuild / लक्ष्य: बिल्ड; _WPPCopyWebApplication / p: कॉन्फ़िगरेशन = रिलीज़; OutDir = C: \ Tmp \ myApp \ MyApp.csproj
इस समाधान का नुकसान यह तथ्य था कि आउटडिर में न केवल प्रकाशन के लिए फाइलें थीं।

2. पहला समाधान अच्छी तरह से काम करता है लेकिन जैसा कि हमने उम्मीद की थी। हम प्रकाशन की कार्यक्षमता चाहते थे क्योंकि यह विज़ुअल स्टूडियो आईडीई में है - अर्थात केवल उन फ़ाइलों को प्रकाशित किया जाना चाहिए जिन्हें आउटपुट निर्देशिका में कॉपी किया जाएगा। जैसा कि यह पहले ही उल्लेख किया जा चुका है कि पहले समाधान में बहुत अधिक फाइलों को आउटडिर में कॉपी किया गया है - प्रकाशन के लिए वेबसाइट तब _PublishedWebsites/{ProjectName}सबफ़ोल्डर में संग्रहीत की जाती है । निम्न आदेश इसे हल करता है - केवल प्रकाशन के लिए फ़ाइलों को वांछित फ़ोल्डर में कॉपी किया जाएगा। तो अब आपके पास निर्देशिका है जिसे सीधे प्रकाशित किया जा सकता है - पहले समाधान की तुलना में आप हार्ड ड्राइव पर कुछ जगह बचाएंगे।

msbuild / target: Build; PipelinePreDeployCopyAllFilesToOneFolder / p। कॉन्फ़िगरेशन = रिलीज़; _PackageTempDir = C: \ Tmp \ myApp \; AutoParameterWebConCigfigConnectionStrings = false MyApp.csproj;
AutoParameterizationWebConfigConnectionStrings=falseपैरामीटर गारंटी देगा कि कनेक्शन तार को विशेष कलाकृतियों के रूप में नहीं संभाला जाएगा और सही ढंग से उत्पन्न किया जाएगा - अधिक जानकारी के लिए लिंक देखें ।


आपके विकल्प # 2 ने मुझे मूल रूप से अप्रचलित _CopyWebApplication से छुटकारा पाने में मदद की। आपने VS 2015 में अपग्रेड के बाद मेरे बिल्ड-सर्वर को बचाया। सराहना।
it3xl

आपका विकल्प # 2 मेरी बिल्ड स्क्रिप्ट के लिए एकदम सही था।
एंथोनीवो

3

आपको अपना वातावरण सेट करना होगा

  • <वैबसाइट का नाम>
  • <डोमेन>

और मेरे ब्लॉग का संदर्भ लें। (क्षमा करें पोस्ट कोरियाई थी)

  • http://xyz37.blog.me/50124665657
  • http://blog.naver.com/PostSearchList.nhn?SearchText=webdeploy&blogId=xyz37&x=25&y=7

    @ECHO OFF
    :: http://stackoverflow.com/questions/5598668/valid-parameters-for-msdeploy-via-msbuild
    ::-DeployOnBuild -True
    :: -False
    :: 
    ::-DeployTarget -MsDeployPublish
    :: -Package
    :: 
    ::-Configuration -Name of a valid solution configuration
    :: 
    ::-CreatePackageOnPublish -True
    :: -False
    :: 
    ::-DeployIisAppPath -<Web Site Name>/<Folder>
    :: 
    ::-MsDeployServiceUrl -Location of MSDeploy installation you want to use
    :: 
    ::-MsDeployPublishMethod -WMSVC (Web Management Service)
    :: -RemoteAgent
    :: 
    ::-AllowUntrustedCertificate (used with self-signed SSL certificates) -True
    :: -False
    :: 
    ::-UserName
    ::-Password
    SETLOCAL
    
    IF EXIST "%SystemRoot%\Microsoft.NET\Framework\v2.0.50727" SET FXPath="%SystemRoot%\Microsoft.NET\Framework\v2.0.50727"
    IF EXIST "%SystemRoot%\Microsoft.NET\Framework\v3.5" SET FXPath="%SystemRoot%\Microsoft.NET\Framework\v3.5"
    IF EXIST "%SystemRoot%\Microsoft.NET\Framework\v4.0.30319" SET FXPath="%SystemRoot%\Microsoft.NET\Framework\v4.0.30319"
    
    SET targetFile=<web site fullPath ie. .\trunk\WebServer\WebServer.csproj
    SET configuration=Release
    SET msDeployServiceUrl=https://<domain>:8172/MsDeploy.axd
    SET msDeploySite="<WebSite name>"
    SET userName="WebDeploy"
    SET password=%USERNAME%
    SET platform=AnyCPU
    SET msbuild=%FXPath%\MSBuild.exe /MaxCpuCount:%NUMBER_OF_PROCESSORS% /clp:ShowCommandLine
    
    %MSBuild% %targetFile% /p:configuration=%configuration%;Platform=%platform% /p:DeployOnBuild=True /p:DeployTarget=MsDeployPublish /p:CreatePackageOnPublish=False /p:DeployIISAppPath=%msDeploySite% /p:MSDeployPublishMethod=WMSVC /p:MsDeployServiceUrl=%msDeployServiceUrl% /p:AllowUntrustedCertificate=True /p:UserName=%USERNAME% /p:Password=%password% /p:SkipExtraFilesOnServer=True /p:VisualStudioVersion=12.0
    
    IF NOT "%ERRORLEVEL%"=="0" PAUSE 
    ENDLOCAL

1

यह मेरी बैच फाइल है

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe C:\Projects\testPublish\testPublish.csproj  /p:DeployOnBuild=true /property:Configuration=Release
if exist "C:\PublishDirectory" rd /q /s "C:\PublishDirectory"
C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v / -p C:\Projects\testPublish\obj\Release\Package\PackageTmp -c C:\PublishDirectory
cd C:\PublishDirectory\bin 
del *.xml
del *.pdb

5
यह बहुत अच्छा होगा यदि आप अपने उत्तर को विस्तृत कर सकते हैं। आपका बैच फ़ाइल ओपी के मुद्दे को कैसे हल करता है? धन्यवाद!
लुइज़ क्रूज़

1

यह मेरा वर्किंग बैच है

प्रकाशित-मेरी-website.bat

SET MSBUILD_PATH="C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin"
SET PUBLISH_DIRECTORY="C:\MyWebsitePublished"
SET PROJECT="D:\Github\MyWebSite.csproj"


cd /d %MSBUILD_PATH%
MSBuild %PROJECT%  /p:DeployOnBuild=True /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl=%PUBLISH_DIRECTORY%

ध्यान दें कि मैंने .Net फ्रेमवर्क फ़ोल्डर्स काम नहीं करने के MsBuild.exeकारण विजुअल स्टूडियो को सर्वर पर स्थापित किया है MsBuild.exe


msbuild test.sln /p:DeployOnBuild=True /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl=.\build_output1\pub /p:PublishProfile=FolderProfile /p:VisualStudioVersion=11.0 /p:outdir=.\build_output1 ...... लेकिन अभी भी केवल DLL ही नहीं मिल रहा है जो मुझे चाहिए फाइल संरचना। इसके साथ गलत क्या है? :(
निशांत

1

आप नीचे दिए गए कोड द्वारा वांछित पथ के साथ समाधान प्रकाशित कर सकते हैं, यहां PublishInDFolder वह नाम है जिसमें वह पथ है जहां हमें प्रकाशित करने की आवश्यकता है (हमें इसे नीचे की तस्वीर में बनाने की आवश्यकता है)

आप इस तरह से पब्लिश फाइल बना सकते हैं

बैच फ़ाइल में कोड की 2 पंक्तियों के नीचे जोड़ें (.bat)

@echo OFF 
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsMSBuildCmd.bat"
MSBuild.exe  D:\\Solution\\DataLink.sln /p:DeployOnBuild=true /p:PublishProfile=PublishInDFolder
pause

0

प्रकाशित आउटपुट उत्पन्न करने के लिए एक और पैरामीटर प्रदान करें। msbuild example.sln / p: publishprofile = profilename / p:

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.