88

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

例如,

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

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

这个问题谈到了构建 XML,但我并没有尝试做任何细节。

我只是想进行部署。

那个问题的后面,有人谈到“MSDeploy”。我可以调查一下,但这是唯一的选择吗?我没有能力在服务器上安装 web deploy。在这种情况下,我真正需要做的就是“发布”并将已发布项目的内容发送到服务器/文件系统上的给定目录。

有人有我可以使用的一个衬里吗?

我必须使用 MSDeploy 吗?

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

在服务器上设置 web 部署不需要设置一些端口、权限和安装一些 IIS 插件吗?

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

4

5 回答 5

162

在 VS 2012(以及适用于 VS 2010 的Azure SDK中提供的发布更新)中,我们简化了 Web 项目的命令行发布。我们通过使用发布配置文件做到了这一点。

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

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

如果要将发布配置文件(.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

于 2012-12-19T07:44:03.273 回答
12

创建一个如下所示的 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>
于 2012-12-18T14:00:07.993 回答
8

以下命令完美运行:

msbuild Myproject.sln  /t:Rebuild /p:outdir="c:\outproject\\" /p:Configuration=Release /p:Platform="Any CPU"
于 2015-05-25T17:51:01.400 回答
2

我发现 Sayed 的回答是部署默认配置,即 Debug。MSBuild 似乎忽略了发布配置文件中选择的配置。因此,我更改了命令以指定正确的部署配置...

msbuild mysln.sln /p:Configuration=[config-name] /p:DeployOnBuild=true /p:PublishProfile=[profile-name]

其中 config-name = Release 或您创建的其他构建配置

于 2020-05-21T03:55:36.387 回答
1

如上所述,您需要构建 Web 项目,但您还需要打包/复制。我们使用文件副本,而不是“发布”...

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

因此,我们最初使用 RELEASE 构建它,然后使用 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 目标,瞧!
于 2016-08-21T13:39:41.817 回答