C# 如何在Visual Studio 2008中自动发布网站?

C# 如何在Visual Studio 2008中自动发布网站?,c#,asp.net,asp.net-mvc,visual-studio,visual-studio-2008,C#,Asp.net,Asp.net Mvc,Visual Studio,Visual Studio 2008,我希望能够在每次构建web asp.net mvc 2项目时自动发布到本地文件夹 我使用的是Visual Studio 2008。您可以在生成后事件中完成 但你确定要这么做吗?它会减慢您的速度,并且您可能不需要为每个构建发布?为什么不直接在IIS而不是Cassini中运行站点。自动化Visual Studio“发布”操作中包含的功能的最简单方法是使用。VS2005也有一个。基本上,它是您添加到解决方案中的一个额外项目,它将以您的web项目为目标,并且在构建时将发布您的web项目作为构建过程的一部

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

我使用的是Visual Studio 2008。

您可以在生成后事件中完成


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

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

选项1:从巡航控制切换到JetBrains TeamCity(你不会后悔的!)。在TeamCity中有一个人工制品选项

工件是由生成生成的文件。完成生成后,TeamCity将根据指定的工件模式在生成的签出目录中搜索工件。然后将匹配的文件上载到服务器,在那里可以下载

选项2:在巡航控制中创建一个任务,以便在构建完成后执行XCOPY

<tasks>
    <msbuild>
       ... here's your main build ...
    </msbuild>

  <exec>
    ... define your XCOPY or other executable task here ...
    <buildTimeoutSeconds>900</buildTimeoutSeconds>
  </exec>

... 这是您的主要版本。。。
... 在此处定义XCOPY或其他可执行任务。。。
900

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

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

此外,您不能从VS IDE中的项目设置编辑
后构建
任务。您需要在记事本或您最喜欢的文本/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>

假的
..\..\drop\
第1步。 确保您有一个web项目

第二步。 进入“查看->工具栏->Web”一键发布


工具栏上的“发布”按钮“web”按钮将执行您想要的操作。。。一步完成构建和发布。

我同意@Luhmann——为什么要这样做?也同意@Luhmann.)不仅如此,您可能会在调试模式下发布,这对测试/发布不好。这可能适用于使用Visual Studio编译的生成服务器。虽然不理想,但在其构建实现自动化之前,这是有意义的。是的,我们发现使用msbuild进行构建服务器构建对少数插件不起作用。它很有用:除了优化和自动化之外,还可以预编译web应用(在本例中是在本地计算机或集成服务器(如ccnet)上)确保未编译的webapp资源(如aspx、resources…)有效,并且非常适合部署。顺便说一句,只要右键单击项目,卸载它,然后右键单击它,您就可以在Visual Studio中轻松编辑项目XML。完成后重新加载。虽然这在编写时完全有效,但Visual Studio 2012和AfterProfessional不再提供Web部署项目!我一直想知道如何做到这一点有一段时间了!这样每周可以节省大约100次点击!!:)