【问题标题】:How to invoke MSBuild via command prompt?如何通过命令提示符调用 MSBuild?
【发布时间】:2011-05-02 08:17:52
【问题描述】:

我有一个网站(不是 Web 应用程序),我想每天晚上从同一目录中的命令提示符发布它。

我不想使用 TeamCity、TFS 等构建自动化工具或 Nant 等第三方工具 - 应该使用 MSBuild。我该怎么做?

更新:在“发布”窗口中,唯一应该检查的选项是 Use Fixed naming and single page assemblies

【问题讨论】:

  • 它应该类似于:msbuild Portal.slnmsbuild website

标签: c# visual-studio-2008 msbuild web publish


【解决方案1】:

根据您的评论,您的网络项目是网站项目,而不是网络应用程序项目。

在这种情况下,“发布”目标不能作为选项,但“AspNetCompiler”是解决方案。

创建一个包含以下内容的 xml 文件并从 MSBuild 中调用它。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="PrecompileWeb">
        <AspNetCompiler
            VirtualPath="/MyWebSite"
            PhysicalPath="c:\inetpub\wwwroot\MyWebSite\"
            TargetPath="c:\precompiledweb\MyWebSite\"
            Force="true"
            Debug="true"
            FixedNames="True"
        />
    </Target>
</Project>

此任务的参考是here,您可以配置所有取消/选中选项。

FixedName="True" 等于勾选“使用固定命名和单页...”选项。

然后您从 MSBuild 调用此文件而不是解决方案文件。

MSBuild your.xml /p:Configuration=<Debug/Release>

只要您的网站项目引用了您的类库,它们就会一起构建。

【讨论】:

  • 我的解决方案包含 4 个class projects 和一个网站,我想先构建项目然后发布网站。你能为这个senario写一个psudo代码吗?发布的唯一设置是使用固定命名和单页程序集,不应选中其他复选框。提前谢谢你
  • 您的答案正是我想要的,但不幸的是,当我运行您的命令(MSBuild 命令)时,我遇到了一个错误,This Application is already Precompiled。它是干什么用的。
  • 我的问题通过从路径中删除 PrecomciledWeb.Config 解决了。
【解决方案2】:
MSBuild.exe **MYPROJ**.sln 
/p:outdir="Z:\output\\",OutputPath="Z:\output\\",webprojectoutputdir="Z:\output\\",configuration=RELEASE 
/t:Clean;Build 

/flp1:logfile=Z:\output\\\Log_msbuild.log;verbosity=detailed 
/flp2:logfile=Z:\output\\\Log_warnings.log;warningsonly;verbosity=detailed 
/flp3:logfile=Z:\output\\\Log_errors.log;errorsonly;verbosity=detailed 

/nologo 
/noconlog

它可以编译所有类型的项目(Web、webservice、桌面、..),它可以创建日志文件(构建日志、错误和警告)。

【讨论】:

    【解决方案3】:

    很抱歉回复晚了,感谢艾伦的输入。不幸的是,你的建议没有奏效,所以我最终做了以下事情:

    • 在“构建默认值”选项卡下选择 This build does not copy output files to a drop folder
    • 使用“处理”选项卡下的默认模板
    • 在“进程”选项卡下的2. Build 下选择AsConfigured 作为Output location 的值
    • 使用此 MSBuild 参数字符串:

      /p:DeployOnBuild=True;DeployTarget=PipelinePreDeployCopyAllFilesToOneFolder;PackageTempRootDir="\\192.168.x.x\Nightly\MainBranch";AutoParameterizationWebConfigConnectionStrings=false

    此结果是我用作测试站点的 webroot 的以下文件夹:\\192.168.x.x\Nightly\MainBranch\PackageTmp。 这显然不是最优的,因为我不希望有 PackageTmp 文件夹,而且我也没有测试在同一个解决方案中有多个 Web 应用程序时会发生什么,但我不能在这个问题上花费更多时间。

    我真的不明白为什么微软把这么简单的任务搞得这么复杂。

    【讨论】:

      猜你喜欢
      • 2021-01-31
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      • 2010-12-25
      • 2018-12-08
      • 1970-01-01
      相关资源
      最近更新 更多