使用MSBuild.exe使用cmd行“发布”ASP.NET MVC 4项目

我正在寻找一个命令来运行MSBuild.exe只需要一个MVC 4项目,并将其发布到给定的目录。

例如,

 MSBuild <solution>/<project>.csproj -publish -output=c:/folder 

这显然是不正确的语法。 我试图简化我的问题。

这个问题谈论了一个构buildXML,但我并没有试图做任何具体的事情。

我只是想做一个部署。

在这个问题上还有人提到“MSDeploy”。 我可以看看,但这是唯一的select吗? 我无法在服务器上安装Web部署。 在这种情况下,我真正需要做的就是“发布”,并将已发布项目的内容发送到服务器/文件系统上的给定目录。

有没有人有我可以使用的单线?

我必须使用MSDeploy吗?

MSDeploy是否需要将Web部署安装在服务器上?

不要在服务器上设置Web部署,需要设置一些端口,权限并安装一些IIS插件?

我很想执行一些简单的事情。

在VS 2012中(以及VS 2010的Azure SDK中提供的发布更新),我们简化了Web项目的命令行发布。 我们通过使用“发布configuration文件”来完成此操作

在VS中,您可以使用发布对话框创build发布configuration文件。 当您创build该configuration文件时,它将自动存储在Properties \ PublishProfiles下的项目中。 您可以使用创build的configuration文件通过命令行从命令行发布以下内容。

 msbuild mysln.sln /p:DeployOnBuild=true /p:PublishProfile=<profile-name> 

如果要将发布configuration文件(.pubxml文件)存储在某个其他位置,则可以将该path传递给PublishProfile。

发布configuration文件是MSBuild文件。 如果您需要自定义发布过程,则可以直接在.pubxml文件中进行。

如果您的最终目标是从命令行传递属性。 我会build议以下。 在VS中创build一个示例发布configuration文件。 检查发布configuration文件,以确定您需要在命令行上传递什么MSBuild属性。 FYI不是所有的发布方法都支持命令行发布(即FTP / FPSE)。

仅供参考如果您正在构build.csproj / .vbproj而不是.sln,并且您正在使用VS 2012,则还应该传入/p:VisualStudioVersion=11.0 。 有关详细信息,请参阅http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx

创build一个如下所示的build.xml文件

启动Visual Studio命令提示符

运行msbuild build.xml

 <?xml version="1.0" encoding="utf-8"?> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0" DefaultTargets="Build"> <PropertyGroup> <Build>$(MSBuildProjectDirectory)\Build</Build> <ProjectFile>MyProject.csproj</ProjectFile> <ProjectName>MyProjectNameInVisualStudio</ProjectName> <CopyTo>$(MSBuildProjectDirectory)\CopyTo</CopyTo> </PropertyGroup> <Target Name="Build"> <RemoveDir Directories="$(Build)"/> <MSBuild Projects="$(ProjectFile)" Properties="Configuration=Release;OutputPath=$(Build);OutDir=$(Build)/"></MSBuild> <Exec Command="robocopy.exe $(Build)\_PublishedWebsites\$(ProjectName) $(CopyTo) /e /is if %errorlevel% leq 4 exit 0 else exit %errorlevel%"/> </Target> </Project> 

随着Web项目,你需要build立,如上所述,但你也需要打包/复制。 我们使用文件副本,而不是“发布”…

也; 我们使用DEBUG / RELEASE来构build网站; 但然后实际环境,即“QA”或“PROD”来处理web.config转换。

因此,我们最初使用RELEASE进行构build,然后使用QA进行打包 – 在下面的示例中。

  <PropertyGroup> <SolutionName>XXX.Website</SolutionName> <ProjectName>XXX.Website</ProjectName> <IisFolderName>XXX</IisFolderName> <SolutionConfiguration>QA</SolutionConfiguration> <!--Configuration will be set based on user selection--> <SolutionDir>$(MSBuildThisFileDirectory)..</SolutionDir> <OutputLocation>$(SolutionDir)\bin\</OutputLocation> <WebServer>mywebserver.com</WebServer> </PropertyGroup> <Target Name="BuildPackage"> <MSBuild Projects="$(SolutionDir)\$(SolutionName).sln" ContinueOnError="false" Targets="Clean;Rebuild" Properties="Configuration=Release" /> <MSBuild Projects="$(SolutionDir)\$(ProjectName)\$(ProjectName).csproj" ContinueOnError="false" Targets="Package" Properties="Configuration=$(SolutionConfiguration);AutoParameterizationWebConfigConnectionStrings=False" /> </Target> <Target Name="CopyOutput"> <ItemGroup> <PackagedFiles Include="$(SolutionDir)\$(ProjectName)\obj\$(SolutionConfiguration)\Package\PackageTmp\**\*.*"/> </ItemGroup> <Copy SourceFiles="@(PackagedFiles)" DestinationFiles="@(PackagedFiles->'\\$(WebServer)\$(IisFolderName)\$(SolutionConfiguration)\%(RecursiveDir)%(Filename)%(Extension)')"/> </Target> 

所以;

  1. 设置你的属性
  2. 调用BuildPackage目标
  3. 调用CopyOutput目标瞧!

下面的命令是完美的:

 msbuild Myproject.sln /t:Rebuild /p:outdir="c:\outproject\\" /p:Configuration=Release /p:Platform="Any CPU"