.net - 解决方案中的 msbuild 和多个 Web 项目

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

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

以下是事情应该如何运作:

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

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

我们曾经使用 web 部署项目来实现这一点,但它们现在已被弃用,所以我尝试使用 msbuild 的 web 发布机制/配置文件,但我基本上迷路了。

我试过这里提到的事情:

  • http://vishaljoshi.blogspot.ca/2010/11/team-build-web-deployment-web-deploy-vs.html
  • MSBuild - Determine a solution's _PublishedWebsites
  • How to do the exact same functionality as the Publish inside visual studio from powershell
  • http://msdn.microsoft.com/en-us/library/dd410108.aspx

  • 我一定遗漏了一些简单的东西,因为我要做的只是一个文件系统副本,没有花哨的 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 中专门设置输出文件夹,但这也会改变在开发人员机器上编译时输出的位置,如果可能的话,我想避免这种情况,以使路径更简单/更少困惑/更干净.

    最佳答案

    所以我让一切正常,这是我现在调用 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 项目都会自动构建并部署到正确的文件夹中。

    关于.net - 解决方案中的 msbuild 和多个 Web 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14265799/

    相关文章:

    c# - 如何在用户打开文件时锁定对文件的访问?

    c# - 如何在解决方案中配置所有 C# 项目

    msbuild - 在TFS在线构建后如何访问artifacts文件夹?

    asp.net - VSTS 构建以空构建工件结束

    c# - 比较 double.MaxValue 是否相等是个好主意吗?

    c# - 从另一个泛型类添加泛型方法约束

    c# - 无法将类型 'string' 隐式转换为 'Microsoft.Azure.Management.DataFactory.Models.SecretBase'

    visual-studio - 发布所有代码后,在 Chrome 上获取 ERR_UNSAFE_PORT

    c++ - 是否可以根据反汇编推断source中哪一行有问题?

    msbuild - 在 MSBuild 中使用注册表属性时引用属性?