【问题标题】:Automate VS 2010 "Publish" Config File Substitutions自动化 VS 2010“发布”配置文件替换
【发布时间】:2011-02-27 23:15:31
【问题描述】:

我正在使用 Visual Studio 2010 的“发布”功能的配置文件替换功能,如 in this article 所述。我想使用 MSBuild/Hudson 自动执行此操作。有人知道怎么做这个吗?

我喜欢它的工作方式,但如果我不能自动化它,我将不得不切换到 XmlMassUpdate 或类似的。

【问题讨论】:

  • 之前这个问题要长得多,但我意识到这个功能实际上与 MSDeploy 无关。
  • 对于未来的搜索者:如果您想复制整个“发布到文件夹”功能以在 Hudson、TeamCity 或 CruiseControl.NET 中使用,请使用以下命令:msbuild /t:Build;PipelinePreDeployCopyAllFilesToOneFolder /p:Configuration=Release;_PackageTempDir=C:\temp\somelocation MyProject.csproj

标签: visual-studio-2010 msbuild hudson


【解决方案1】:

我在 Hudson 使用它来定位 Release:

/属性:配置=发布

具体设置如下:

建造 MSBuild 版本:msbuild-4(配置为指向 v4 msbuild) MsBuild 构建文件:project_name.sln 命令行参数:/Property:Configuration=Release

您可以在您的项目目录中通过运行与此类似的东西(因为您的 .NET 框架版本可能不同)来测试它:

%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319\msbuild project.sln /Property:Configuration=Release

【讨论】:

  • 哎呀,madgnome 几乎打败了我。留下我的回复,因为找到这些信息比预期的要难,所以这可能有助于搜索索引。
  • 哦,附带说明:如果您将批处理任务插件添加到 Hudson,您可以将 msdeploy 设置为批处理任务以自动推送到暂存并添加可以手动运行的批处理任务以推送使用 msdeploy 暂存到生产环境。我仍在研究数据库方面(查看 Migrator.NET 等)。我的脚本是:msdeploy -verb:sync -source:dirPath='%CD%' -dest:dirPath='e:\some\dir\on\remote\system',computername=_STAGING_SERVER_,username=_USER_,password=_PASS_ -skip:objectName=dirPath,absolutePath=.*\.hg(跳过 .hg 目录,因为将 Mercurial 用于 SCM)。
【解决方案2】:

说明

要转换配置文件,您必须执行 TransformWebConfig 目标。

这个目标接受两个文件Web.configWeb.$(Configuration).config 并生成一个Web.config。生成的文件是当前配置的原始文件的转换版本。

此文件在文件夹中生成:obj\$(Configuration)\TransformWebConfig

用法

你并没有真正解释你想要实现什么,所以这里是一个基本用法,一个在给定文件夹中生成转换配置文件的作业。

在导入Microsoft.WebApplication.targets之后,在项目文件*.csproj的末尾添加以下内容

<PropertyGroup>
  <!-- Directory where your web.config will be copied -->
  <TransformedWebConfigDestination>$(MSBuildProjectDirectory)</TransformedWebConfigDestination>
</PropertyGroup>

<!--
  This target transforms the web.config based on current configuration and
  put the transformed files in $(TransformedWebConfigDestination) folder
-->
<Target Name="ConfigSubstitution">
  <CallTarget Targets="TransformWebConfig"/>

  <ItemGroup>
    <TransformedWebConfig Include="obj\$(Configuration)\TransformWebConfig\Web.config"/>
  </ItemGroup>

  <!-- Copy the transformed web.config to the configured destination -->
  <Copy SourceFiles="@(TransformedWebConfig)"
        DestinationFolder="$(TransformedWebConfigDestination)"/>
</Target>

Hudson 中,您可以在构建中添加构建步骤,或创建配置如下的专用作业:

  • MsBuild 构建文件:Your csproj file.
  • 命令行参数:/t:ConfigSubstitution /p:Platform=AnyCpu;Configuration=Test;TransformedWebConfigDestination=DestinationFolder

【讨论】:

  • 我很抱歉我很愚蠢:所以这个功能是 MSBuild 4.0 的一部分,这意味着这个版本的 MSBuild 需要在 Hudson 服务器上,对吗?
  • 没错。 MSBuild 应该安装在服务器上(我认为你必须安装 Visual Studio,才能拥有一切)。并且您需要配置 hudson 以使用正确版本的 msbuild。
  • 对于未来的搜索者,看起来您只需要 .NET 4.0 框架 + 几个额外的 vs2010 文件来进行 4.0 构建。 scmgalaxy.com/release-updates/…
  • 最后一个问题,如果你有时间——你在哪里找到这个目标的参考?谷歌搜索拉起纳达。我对自动化发布工具的其他方面很感兴趣,即简单的“发布到文件夹”功能。
  • 您可以查看在 Visual Studio 输出视图中发布(显示生成的输出)之类的步骤中发生的情况。之后,您将在不同的文件中搜索各种被调用的目标。发布目标位于 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets
【解决方案3】:

编辑你的 web project.csproj

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

添加 -
&lt;UseMsDeployExe&gt;True&lt;/UseMsDeployExe&gt;

查看构建输出(确保 VS Tools - Options - Project & Solutions -Build & Run - MSBuild Output Verbosity -Detailed)

您应该能够看到 VS 用于生成包的 msdeploy 命令。据我了解,VS 在使用 MSBuild 构建时实际上使用 Web Platform Pipeline API 和 .target 文件来实际生成部署包,并且此命令改为使用 MsDeploy。

这东西太需要文档了,非常令人沮丧。

【讨论】:

  • 感谢您的回复。我添加了该行(除了在我特定的所需平台下)并进行了构建,但在我的构建输出中仍然没有看到该命令。我将事情变得冗长,在那里我可以看到 UseMsDeploy 设置正在被捕获,但是一旦超过 --- Publish started: 文本,字符串 msbuild 就不会出现(更不用说 msbuild.exe)了。 :'-(
猜你喜欢
  • 1970-01-01
  • 2012-01-21
  • 2012-07-21
  • 2011-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多