在一个解决方案中使用MSBuild和多个Web项目

4
我们正在升级到vs2k12和.net 4.5,所以我正在进行构建流程并在我们的CI服务器上重新使一切正常,但我遇到了一些困难。
以下是事情应该如何工作:
我们有一个解决方案文件,其中包含两个Web项目,在开发人员的机器上,这些项目被编译“就地”(输出未重定向),并且IIS指向各自的项目文件夹进行开发和测试,这部分很好。
在我们的构建机器上,我们需要将每个Web应用程序(2)的输出重定向到单独的文件夹中,以便由我们的安装程序打包,这就是我遇到困难的地方。正在发生的是,一个Web项目的内容最终会出现在另一个Web项目的文件夹中,覆盖像Global.aspx和web.config这样的文件,因为每个项目都有自己的文件。
我们曾经使用Web部署项目来完成此操作,但它们现在已被弃用,因此我正在尝试使用msbuild的Web发布机制/配置文件,但我基本上迷失了方向。
我尝试了这里提到的东西:

我可能错过了一些简单的东西,因为我只是想进行文件系统复制,没有什么花哨的发布到某个Web服务器的魔法。

目前,我正在从我的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应用程序项目还是Web站点“项目”?您是否愿意让Visual Studio为您打包项目,或者您需要使用现有的安装程序技术? - John Saunders
它们是Web应用程序项目(如果有的话,其中一个是WCF服务应用程序)。我想我可以让Visual Studio将它们打包,只要它们打包成标准的zip文件就可以了。我该如何实现这一点? - Joe
太晚了,我无法找到所有好的链接,但是在http://iis.net网站上查找MSDEPLOY。如果你使用`/p:DeployOnBuild=true`运行MSBUILD,则会为每个站点创建MSDEPLOY包。这些包可以部署到任何IIS站点,或者实际上可以直接导入到IIS中。 - John Saunders
1个回答

5
所以我已经让所有东西都运作起来了,现在我是这样调用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项目都会自动构建和部署到正确的文件夹中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接