Visual studio 2010 从命令行发布Web应用程序

Visual studio 2010 从命令行发布Web应用程序,visual-studio-2010,msbuild,build,publish,Visual Studio 2010,Msbuild,Build,Publish,在同一个解决方案中,我有一系列基于.NET4的web应用程序(WCF和web),但需要从命令行有选择地发布 到目前为止,我已经尝试了各种方法,MSBuild、aspnet_编译器,但到目前为止都没有成功 我需要能够指定项目,而不是解决方案,运行任何转换并将输出重定向到文件夹…基本上模仿鼠标右键单击“发布”选项,使用文件系统 除此之外,我想让项目单独进行—不要到处添加msbuild文件,因为这是一个特定的构建,不一定与项目相关 我试过的东西: 您退房了吗 这应该可以完成您需要的所有步骤—它可

在同一个解决方案中,我有一系列基于.NET4的web应用程序(WCF和web),但需要从命令行有选择地发布

到目前为止,我已经尝试了各种方法,MSBuild、aspnet_编译器,但到目前为止都没有成功

我需要能够指定项目,而不是解决方案,运行任何转换并将输出重定向到文件夹…基本上模仿鼠标右键单击“发布”选项,使用文件系统

除此之外,我想让项目单独进行—不要到处添加msbuild文件,因为这是一个特定的构建,不一定与项目相关

我试过的东西:

您退房了吗

这应该可以完成您需要的所有步骤—它可以将web应用程序捆绑到一个可部署文件(基本上是一个ZIP)中,服务器上有一个“引擎”,可以解释该可部署包并为您完成所有繁重的工作


还可以看到斯科特·汉斯曼的博客文章——非常有启发性

将以下脚本另存为publishProject.bat

rem publish passed project 
rem params: %configuration% %destDir% %srcDir% %proj%
@echo off
SET DestPath=d:\projects\Publish\%2
SET SrcPath=d:\projects\Src\%3\
SET ProjectName=%4
SET Configuration=%1

RD /S /Q "%DestPath%" rem clear existed directory
:: build project
MSBuild  "%SrcPath%%ProjectName%.vbproj" /p:Configuration=%Configuration%
:: deploy project
::/t:TransformWebConfig
MSBuild "%SrcPath%%ProjectName%.vbproj" /target:_CopyWebApplication /property:OutDir=%DestPath%\ /property:WebProjectOutputDir=%DestPath% /p:Configuration=%Configuration%
xcopy "%SrcPath%bin\*.*" "%DestPath%\bin\" /k /y

echo =========================================
echo %SrcPath%%3.vbproj is published
echo =========================================
我从另一个批处理文件调用它

@echo off
rem VS2010. For VS2008 change %VS100COMNTOOLS% to %VS90COMNTOOLS%
call "%VS100COMNTOOLS%\vsvars32.bat" 
SET ex=.\publishProject.bat Release

call %ex% KillerWebApp1 KillerWebApp1\KillerWebApp1 KillerWebApp1
call %ex% KillerWebApp2 KillerWebApp2\KillerWebApp2 KillerWebApp2
call %ex% KillerWebApp3 KillerWebApp3\KillerWebApp3 KillerWebApp3
call %ex% KillerWebApp4 KillerWebApp4\KillerWebApp4 KillerWebApp4
编辑: 上述代码适用于大多数情况,但不适用于所有情况。也就是说,我们使用另一个asp.net应用程序,并将其链接为IIS中的虚拟文件夹。对于这种情况,VS2008可以很好地处理上面的代码,但VS2010在部署时也可以从虚拟目录复制文件。以下代码在VS2010()中也可以正常工作

添加到项目文件中(*.csproj,*.vbproj)


我知道这是一个老问题,但我刚刚学到了一些东西,所以我决定与大家分享:虽然“\u CopyWebApplication”目标存在并运行是100%正确的,但从.NET 4.0开始,它已被Microsoft.Web.Publishing.targets中的“\u WPPCopyWebApplication”目标所取代,该目标支持Web.config转换语法等新功能,等等。

我用Web.config转换的CCNET解决方案

<tasks>
    <msbuild>
        <executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
        <workingDirectory>E:\VersionesCC\Trunk_4\SBatz\Gertakariak_Orokorrak\GertakariakMS\Web</workingDirectory>
        <projectFile>GertakariakMSWeb2.vbproj</projectFile>
        <targets>Build</targets>
        <timeout>600</timeout>
        <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger>
        <buildArgs>
            /noconsolelogger /p:Configuration=Release /v:diag
            /p:DeployOnBuild=true
            /p:AutoParameterizationWebConfigConnectionStrings=false
            /p:DeployTarget=Package
            /p:_PackageTempDir=E:\Aplicaciones\GertakariakMS2\Web
        </buildArgs>
        </msbuild>
</tasks>

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
E:\VersionesCC\Trunk\u 4\SBatz\Gertakariak\u orokorak\GertakariakMS\Web
GertakariakMSWeb2.vbproj
建造
600
C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll
/noconsolelogger/p:Configuration=Release/v:diag
/p:DeployOnBuild=true
/p:AutoParameterizationWebConfigConnectionStrings=false
/p:DeployTarget=Package
/p:_PackageTempDir=E:\Aplicaciones\GertakariakMS2\Web

请查看此感谢的答案,但这是针对web项目的,而不是针对web应用程序的。不幸的是,它们的工作方式不同。这是为部署到我们无法访问的受控服务器做准备,所以我们需要提供一个包含代码的文件夹,供更改团队部署。@Kieron:为什么不能提供一个ZIP文件而不是目录?不幸的是,不是我的流程。但我们也没有部署到IIS,而是部署到一个文件夹。成功了,谢谢!将其移动到调用命令行msbuild的C#应用程序中。谢谢。这个答案没有解释你为什么这样做,如何处理你列出的代码片段,所有这些硬编码的值需要如何适应读者自己的情况,以及你所说的“for CCNET”是什么意思。
rem publish passed project 
rem params: %configuration% %destDir% %srcDir% %proj%
@echo off
SET DestPath=d:\projects\Publish\%2
SET SrcPath=d:\projects\Src\%3\
SET ProjectName=%4
SET Configuration=%1

:: clear existed directory
RD /S /Q "%DestPath%"

:: build and publish project
MSBuild "%SrcPath%%ProjectName%.vbproj" "/p:Configuration=%Configuration%;AutoParameterizationWebConfigConnectionStrings=False;PublishDestination=%DestPath%" /t:PublishToFileSystem
<tasks>
    <msbuild>
        <executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
        <workingDirectory>E:\VersionesCC\Trunk_4\SBatz\Gertakariak_Orokorrak\GertakariakMS\Web</workingDirectory>
        <projectFile>GertakariakMSWeb2.vbproj</projectFile>
        <targets>Build</targets>
        <timeout>600</timeout>
        <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger>
        <buildArgs>
            /noconsolelogger /p:Configuration=Release /v:diag
            /p:DeployOnBuild=true
            /p:AutoParameterizationWebConfigConnectionStrings=false
            /p:DeployTarget=Package
            /p:_PackageTempDir=E:\Aplicaciones\GertakariakMS2\Web
        </buildArgs>
        </msbuild>
</tasks>