【问题标题】:How to automatically publish a website on build in Visual Studio 2008?如何在 Visual Studio 2008 中自动发布网站?
【发布时间】:2010-02-14 19:41:34
【问题描述】:

我希望能够在每次构建 web asp.net mvc 2 项目时自动发布到本地文件夹。

我使用 Visual Studio 2008。

【问题讨论】:

  • 我同意@Luhmann -- 你为什么要这样做?
  • 也同意@Luhmann。 :) 不仅如此,您可能会在调试模式下发布,这对测试/发布不利。
  • 这可能适用于使用 Visual Studio 进行编译的构建服务器。虽然不理想,但在他们的构建自动化之前是有意义的。
  • 是的,我们发现使用 msbuild 构建服务器构建对少数插件不起作用。
  • 这很有用:除了优化和自动化之外,预编译 Web 应用程序(在本例中在本地机器或集成服务器上,如 ccnet 上)确保未编译的 webapp 资源(如 aspx、资源... ) 是有效的并且非常适合部署。

标签: c# asp.net asp.net-mvc visual-studio visual-studio-2008


【解决方案1】:

好吧,您可以在构建后事件中使用with MSBuild

但是您确定要这样做吗?它会减慢您的速度,并且您可能不需要为每个构建发布?为什么不在 IIS 而不是 Cassini 中运行该站点。

【讨论】:

    【解决方案2】:

    第 1 步。 确保您有一个 Web 项目。

    第 2 步。 去查看->工具栏->网页一键发布。

    工具栏上的发布按钮 web 按钮将做您想做的事...一步构建和发布。

    【讨论】:

    • 太棒了!我一直想知道如何做到这一点!这样每周可以节省大约一百次点击!! :)
    【解决方案3】:

    自动化 Visual Studio 的“发布”操作中包含的功能的最简单方法是使用 web deployment project。 VS2005 也有一个。基本上,它是您添加到解决方案中的一个额外项目,该项目将针对您的 Web 项目,并且在构建时会将您的 Web 项目作为构建过程的一部分发布。它使得在构建过程中自动构建站点变得非常简单,而无需使用 MSBuild(尽管 MSBuild 并不难)。

    【讨论】:

    • 虽然这在编写时完全有效,但 Web 部署项目不再适用于 Visual Studio 2012 及之后的版本
    【解决方案4】:

    这是我在我的网站项目中的做法。请注意,这将复制到一个文件夹;如果您想通过 FTB、WebDav 或 SSH 发布,您需要使用 Exec 任务而不是 Copy 任务,并指定可以通过所需协议部署文件的命令行工具。

    此外,您不能从 VS IDE 的项目设置中编辑 AfterBuild 任务。您需要在记事本或您喜欢的文本/XML 编辑器中打开它。 (如果您关闭解决方案并强制它使用 XML 编辑器打开文件,您甚至可以使用 VS :-))

    还有一个调用AspNetCompiler 的构建目标,我目前已将其关闭,但您可以通过MvcBuildViews 属性值轻松打开。

      <PropertyGroup>
        <MvcBuildViews>false</MvcBuildViews>
        <DropPath>..\..\drop\</DropPath>
      </PropertyGroup>
      <Target Name="AfterBuildCompiler" Condition="'$(MvcBuildViews)'=='true'">
        <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)" />
      </Target>
      <Target Name="AfterBuild" DependsOnTargets="AfterBuildCompiler">
        <ConvertToAbsolutePath Paths="$(DropPath)">
          <Output TaskParameter="AbsolutePaths" ItemName="FullDropPath" />
        </ConvertToAbsolutePath>
        <Message Importance="High" Text="Binplacing -&gt; @(FullDropPath)" />
        <ItemGroup>
          <Binaries Include="$(OutputPath)**\*.*" />
        </ItemGroup>
        <Copy SkipUnchangedFiles="True" SourceFiles="@(Compile)" DestinationFiles="@(Compile->'$(DropPath)%(Identity)')" />
        <Copy SkipUnchangedFiles="True" SourceFiles="@(Content)" DestinationFiles="@(Content->'$(DropPath)%(Identity)')" />
        <Copy SkipUnchangedFiles="True" SourceFiles="@(EntityDeploy)" DestinationFiles="@(EntityDeploy->'$(DropPath)%(Identity)')" />
        <Copy SkipUnchangedFiles="True" SourceFiles="@(Binaries)" DestinationFiles="@(Binaries->'$(DropPath)%(Identity)')" />
      </Target>
    

    【讨论】:

    • 顺便说一句,您可以轻松地在 Visual Studio 中编辑项目 XML,如果您只需右键单击项目,卸载它,然后右键单击它的编辑。完成后重新加载。
    【解决方案5】:

    选项 1:从 Cruise Control 切换到 JetBrains TeamCity(您不会后悔的!)。在 TeamCity 中有一个 Artifacts 选项...

    “工件是由构建生成的文件。完成构建后,TeamCity 根据指定的工件模式在构建的检出目录中搜索工件。然后将匹配的文件上传到服务器,供下载。”

    选项 2:在 Cruise Control 中创建任务以在构建完成后执行 XCOPY。

    <tasks>
        <msbuild>
           ... here's your main build ...
        </msbuild>
    
      <exec>
        ... define your XCOPY or other executable task here ...
        <buildTimeoutSeconds>900</buildTimeoutSeconds>
      </exec>
    

    选项 3:在您的解决方案中创建一个构建后项目,并在其中包含一个复制文件的任务,在该任务上添加一个仅在巡航控制上运行时触发的条件(各种环境变量启用此功能)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多