VS2010 Web Publish文件系统部署的命令行版本

时间:2010-10-27 02:24:23

标签: visual-studio-2010 command-line msdeploy web-publishing msbuild-wpp

民间,

简而言之,我想复制这个对话框: alt text

这是一个Visual Studio 2010 ASP.Net MVC项目。如果我执行此命令,我将获得所需的所有文件,包括“C:\ ToDeploy”目录中已转换的web.configs。

我想在命令行上复制它,以便我可以将它用于QA环境构建。

我在远程部署的命令行上看过各种关于如何执行此操作的文章,但我只想为文件系统部署执行此操作。

我知道我可以使用nAnt任务或rake脚本复制此功能,但我想使用这种机制来实现它,所以我不会重复自己。

我对此进行了更多调查,我发现了这些链接,但没有一个能够彻底解决这个问题:

提前致谢!

6 个答案:

答案 0 :(得分:46)

好的,终于想通了。

您需要的命令行是:

msbuild path/to/your/webdirectory/YourWeb.csproj /p:Configuration=Debug;DeployOnBuild=True;PackageAsSingleFile=False

您可以通过在/ p:部分添加outdir=c:\wherever\属性来更改项目输出的位置。

这将在以下位置创建输出:

path/to/your/webdirectory/obj/Debug/Package/PackageTmp/

然后,您可以使用您想要的任何方法从上述目录中复制这些文件。

我使用Albacore将这一切都作为ruby rake任务工作。我试图完成所有这些,所以我实际上可以把它作为对项目的贡献。但如果有人想要之前的代码,请告诉我。

我发现另一个问题是它将令牌参数放入Web.config中。如果您不需要该功能,请务必添加:

/p:AutoParameterizationWebConfigConnectionStrings=false

答案 1 :(得分:11)

我以为我会发布另一个我发现的解决方案,我已经更新了此解决方案以包含日志文件。

这与Publish a Web Application from the Command Line类似,但只是清理并添加了日志文件。还可以查看原始来源http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild

在Web应用程序项目的根目录中创建MSBuild_publish_site.bat(无论如何)

set msBuildDir=%WINDIR%\Microsoft.NET\Framework\v4.0.30319
set destPath=C:\Publish\MyWebBasedApp\

:: clear existing publish folder
RD /S /Q "%destPath%"

call %msBuildDir%\msbuild.exe  MyWebBasedApp.csproj "/p:Configuration=Debug;PublishDestination=%destPath%;AutoParameterizationWebConfigConnectionStrings=False" /t:PublishToFileSystem /l:FileLogger,Microsoft.Build.Engine;logfile=Manual_MSBuild_Publish_LOG.log

set msBuildDir=
set destPath=

通过在<Import Project=标记下添加以下xml 来更新您的Web应用程序项目文件MyWebBasedApp.csproj

<Target Name="PublishToFileSystem" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder">
<Error Condition="'$(PublishDestination)'==''" Text="The PublishDestination property must be set to the intended publishing destination." />
    <MakeDir Condition="!Exists($(PublishDestination))" Directories="$(PublishDestination)" />

    <ItemGroup>
        <PublishFiles Include="$(_PackageTempDir)\**\*.*" />
    </ItemGroup>

    <Copy SourceFiles="@(PublishFiles)" DestinationFiles="@(PublishFiles->'$(PublishDestination)\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="True" />
</Target>

这对我来说比其他解决方案更有效。

有关详细信息,请查看以下内容:

1)http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild

2)Publish a Web Application from the Command Line

3)Build Visual Studio project through the command line

答案 2 :(得分:1)

使用 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>

答案 3 :(得分:1)

在VS2012及更高版本上,您可以使用msbuild 12.0引用现有的publish profiles on your project,这相当于右键单击并发布...选择发布配置文件(&#34; MyProfile&#34; on this示例):

msbuild C:\myproject\myproject.csproj "/P:DeployOnBuild=True;PublishProfile=MyProfile"

答案 4 :(得分:0)

我有一个Visual Studio 2012的解决方案:https://stackoverflow.com/a/15387814/2164198

然而,它完全没有安装Visual Studio! (参见更新)。 我还没有检查是否可以从Visual Studio Express 2012中获取所有需要的东西用于Web安装。

答案 5 :(得分:-1)

一个完整的msbuild文件,灵感来自CubanX

    <Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="Publish">
        <RemoveDir Directories="..\build\Release\Web\"
                     ContinueOnError="true" />        
       <MSBuild Projects="TheWebSite.csproj"
                Targets="ResolveReferences;_CopyWebApplication"
                Properties="Configuration=Release;WebProjectOutputDir=..\build\Release\Web;OutDir=..\build\Release\Web\bin\"
        />  
    </Target>
    <Target
        Name="Build"
        DependsOnTargets="Publish;">
    </Target>   
</Project>

这会将发布的网站放在Web .. \ build \ Release文件夹