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

伙计们,

简而言之,我想复制这个对话框: 替代文字

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

我想在命令行上复制这个,所以我可以将它用于QA环境构build。

我已经看过关于如何在Remote Deploys命令行上执行此操作的各种文章,但是我只是想为File System部署做这些。

我知道我可以使用nAnt任务或者rake脚本复制这个function,但是我想用这个机制来做,所以我不会重复自己。

我已经调查了一些,我发现这些链接,但没有一个干净地解决它:

  • VS 2008版本,但没有Web.Config转换
  • 创build软件包,但不部署它。我需要在这个软件包上使用MSDeploy吗?
  • 在上面创build它之后部署包… UI是否真的做了这两步探戈?

提前致谢!

好的,终于明白了这一点。

你需要的命令行是:

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

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

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

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

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

我已经得到了这个所有的工作,使用长鳍金枪鱼 ruby耙任务。 我试图把这一切都做完,所以我可以把它作为对项目的贡献。 但如果有人想在这之前的代码,让我知道。

我发现另一个皱纹是它将Tokenized参数放到Web.config中。 如果您不需要该function,请确保添加:

 /p:AutoParameterizationWebConfigConnectionStrings=false 

我想我会发布另一个解决scheme,我发现,我已经更新了这个解决scheme,包括一个日志文件。

这与从命令行发布Web应用程序类似,但只是清理并添加了日志文件。 也检查出原始来源http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild

在您的Web应用程序项目的根目录中创build一个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> 

这对我来说比其他解决scheme更好。

看看下面的更多信息:

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

2) 从命令行发布Web应用程序

3) 通过命令行构buildVisual Studio项目

使用Web.config转换我的CCNET解决scheme:

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

在VS2012及以上版本中,您可以使用msbuild 12.0 在您的项目中引用现有的发布configuration文件 ,这将相当于右键单击并发布…select发布configuration文件(本示例中为“MyProfile”):

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

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

但是,它并没有安装Visual Studio! (请参阅更新 )。 我没有检查是否可以从Visual Studio Express 2012中安装所需的所有东西。

来自CubanX的一个完整的msbuild文件

  <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文件夹中