【问题标题】:msbuild and multiple web projects in a solution解决方案中的 msbuild 和多个 Web 项目
【发布时间】:2013-01-10 19:30:54
【问题描述】:

我们正在升级到 vs2k12 和 .net 4.5,所以我正在完成我们的构建过程,并让我们的 CI 服务器上的所有内容再次运行,但我遇到了一些困难。

事情应该是这样的:

我们有一个解决方案文件,其中包含两个 Web 项目,在开发人员机器上,它们是“就地”编译的(输出未重定向),IIS 指向相应的项目文件夹进行开发和测试,这部分很好。

在我们的构建机器上,我们需要将每个 Web 应用程序 (2) 的输出重定向到单独的文件夹中,以便由我们的安装程序打包,这就是我遇到困难的地方。发生的情况是其中一个 Web 项目的内容最终进入了另一个 Web 项目文件夹,覆盖了 Global.aspx 和 web.config 等文件,因为每个项目都有自己的。

我们曾经使用 Web 部署项目来完成此任务,但它们现在已被弃用,因此我正在尝试使用 msbuild 的 Web 发布机制/配置文件,但我基本上迷路了。

我已经尝试过这里提到的东西:

我一定遗漏了一些简单的东西,因为我要做的只是一个文件系统副本,而不是花哨的 schmancy 发布到某些网络服务器的魔法。

目前,我正在从我的 nant 构建脚本中调用 sln 文件上的 msbuild,如下所示:

<msbuild project="${root.dir}\WebPortal\WebPortal ExtJS\WebPortal ExtJS.sln" verbosity="${tools.dotnet.msbuild.verbosity}">
    <property name="Configuration" value="${msbuild.configuration}" />
    <property name="OutputPath" value="${project.builddir}" />
    <property name="DeployOnBuild" value="true" />
    <property name="DeployTarget" value="PipelinePreDeployCopyAllFilesToOneFolder " />
    <property name="WebPublishMethod" value="FileSystem" />
    <property name="publishUrl" value="${project.builddir}" />
    <property name="DeleteExistingFiles" value="true" />
    <property name="DebugSymbols" value="${msbuild.debugSymbols}" />
    <property name="DebugType" value="${msbuild.debugType}" />
</msbuild>

当从同一个解决方案文件构建时,我需要对每个 Web 项目执行什么操作才能使输出正确重定向?我曾考虑专门在每个 csproj 中设置输出文件夹,但这也会改变在开发人员机器上编译时输出的位置,我想尽可能避免这种情况,以保持路径更简单/更少混乱/更干净.

【问题讨论】:

  • 这些是 Web 应用程序项目,还是网站“项目”?您是否愿意让 Visual Studio 为您打包项目,还是需要使用现有的安装程序技术?
  • 它们是 Web 应用程序项目(如果重要的话,一个是 WCF 服务应用程序)。我想我愿意让 Visual Studio 将它们打包,只要它是像 zip 文件这样的标准文件。我该如何实现呢?
  • 太晚了,我找不到所有好的链接,但请在 iis.net 网站上查找 MSDEPLOY。如果您使用/p:DeployOnBuild=true 运行 MSBUILD,那么它将为您的每个站点创建 MSDEPLOY 包。这些可以部署到任何 IIS 站点,或者实际上可以直接导入 IIS。

标签: .net visual-studio msbuild visual-studio-2012 nant


【解决方案1】:

所以我一切正常,这就是我现在调用 MSBuild 的方式:

<msbuild project="${root.dir}\WebPortal\WebPortal ExtJS\WebPortal ExtJS.sln"
                 verbosity="${tools.dotnet.msbuild.verbosity}">
            <property name="Configuration" value="${msbuild.configuration}" />
            <property name="DeployDir" value="..\..\${output.dir}" />
            <property name="DeployOnBuild" value="true" />
            <property name="PublishProfile" value="BuildMachineDeployment" />
            <property name="DebugSymbols" value="${msbuild.debugSymbols}" />
            <property name="DebugType" value="${msbuild.debugType}" />
            <arg value="/m" />
        </msbuild>

然后在我的部署配置文件的 .pubxml 文件中,我将此属性设置为使用我创建的 $(DeployDir) 变量:

<publishUrl>$(DeployDir)\EmerGeo Portal</publishUrl>

现在我的解决方案中的所有 Web 项目都会自动构建并部署到正确的文件夹。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 2017-12-23
    相关资源
    最近更新 更多