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

Eri*_*388 79 msbuild msdeploy visual-studio asp.net-mvc-4

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

例如,

MSBuild <solution>/<project>.csproj -publish -output=c:/folder
Run Code Online (Sandbox Code Playgroud)

这显然是不正确的语法.我正在努力简化我的问题.

这个问题讨论了构建XML,但我并没有尝试用这么多细节做任何事情.

我只是想尝试部署.

那个问题中,有人说"MSDeploy".我可以调查一下,但这是唯一的选择吗?我无法在服务器上安装Web部署.在这种情况下,我真正需要做的就是"发布"并将已发布项目的内容发送到服务器/文件系统上的给定目录.

有没有人可以使用一个班轮?

我必须使用MSDeploy吗?

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

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

我喜欢简单地执行一些事情.

Say*_*imi 148

在VS 2012中(以及Azure SDK for VS 2010中提供的发布更新),我们简化了Web项目的命令行发布.我们通过使用发布配置文件完成了这项工作.

在VS for web项目中,您可以使用发布对话框创建发布配置文件.创建该配置文件时,它会自动存储在Properties\PublishProfiles下的项目中.您可以使用创建的配置文件从命令行使用以下命令行发布.

msbuild mysln.sln /p:DeployOnBuild=true /p:PublishProfile=<profile-name>
Run Code Online (Sandbox Code Playgroud)

如果要将发布配置文件(.pubxml文件)存储在其他位置,可以将路径传递给PublishProfile.

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

如果您的最终目标是从命令行传入属性.我会推荐以下内容.在VS中创建示例发布配置文件.检查发布配置文件以确定需要在命令行上传递的MSBuild属性.仅供参考,并非所有发布方法都支持命令行发布(即FTP/FPSE).

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

  • 这在VS 2013中有效吗?运行相同的命令行不会产生发布.也没有错误.使用发布配置文件中的简单文件系统部署进行测试.构建作品,但没有发布结果.目的地是空的. (10认同)
  • 在这种情况下,创建文件系统发布配置文件. (9认同)
  • 我认为OP只是想将Web应用程序"部署"到本地计算机上的任意文件夹中. (3认同)
  • 那么,在部署服务器上,一个人需要安装可视化工作室IDE来获得这样的命令吗? (3认同)
  • 或者我可以这样做:http://www.microsoft.com/en-us/download/details.aspx?id = 30670 (2认同)
  • 当我使用此文件时,即使.pubxml文件具有&lt;LastUsedBuildConfiguration&gt; Release &lt;/ LastUsedBuildConfiguration&gt;,它也会发布我的调试版本 (2认同)
  • @reggaeguitar配置必须在构建开始时设置,因此无法在.pubxml中设置.您应该将其作为cmd行参数传递.有关详细信息,请访问http://sedodream.com/2012/10/27/msbuildhowtosettheconfigurationproperty.aspx..pubxml中的值仅适用于VS UI. (2认同)
  • VS2015,BuildTools,无 IDE,文件系统配置文件:“C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe” MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=MyProfile /p:VisualStudioVersion =14.0 /p:配置=发布 (2认同)

nil*_*ils 10

创建一个类似于下面的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>
Run Code Online (Sandbox Code Playgroud)

  • 这个答案对我很有帮助,但有一件事我会补充来改进它.如果您按照书面执行,robocopy将返回退出代码1以指示成功复制...导致msbuild认为构建失败.要解决此问题,只需在robocopy命令中的/ e后附加"if%errorlevel%leq 1 exit 0 else exit%errorlevel%". (7认同)

小智 8

以下命令完美运行:

msbuild Myproject.sln  /t:Rebuild /p:outdir="c:\outproject\\" /p:Configuration=Release /p:Platform="Any CPU"
Run Code Online (Sandbox Code Playgroud)

  • 当您只想发布内容文件时,这是可行的。但不执行 web.config 转换 (3认同)
  • 此方法不适用于发布 MVC 网站(不复制视图) (3认同)