gpt4 book ai didi

.net - 具有多个环境的 MsBuild 和 MsDeploy

转载 作者:行者123 更新时间:2023-12-03 08:40:57 25 4
gpt4 key购买 nike

是否有将解决方案配置映射到环境并使用 MsDeploy 为每个环境打包的良好模式?

最短版本:Grab this file, and try to change the .msbuild file so that a package is created.

细节

我有一个包含大量库和 ASP.NET MVC 应用程序的解决方案。我使用调用主解决方案的 msbuild 文件驱动构建,然后执行其他操作。我想使用新的 msdeploy 打包来准备一个 .zip 文件以供以后分发,但我遇到了各种困难。

我的解决方案有 4 种配置:Local , Dev , Test , 和 Prod ,它与我想要映射到的环境相匹配。在该解决方案中,所有库都有 DebugRelease像往常一样的模式。例如,在 Local解决模式,所有库都编译在Debug模式。然后,主应用程序有与解决方案匹配的环境,这样我就可以拥有Web.Dev.config等等,这似乎是使用事物的自然方式。

如果我这样打包:

<Target Name="BuildWebPackage">
<MSBuild Projects="..\Publisher\Site\Site.vbproj"
Targets="Package"/>
</Target>

我遇到了一个问题, Configuration=Local被错误地映射到 Site.vbproj 的库项目引用,它不能编译它们。

我看到了两种可能的解决方案:一种我无法正常工作,另一种非常难看。

尝试 1

我尝试调用 Package通过解决方案定位目标(在本例中,“应用程序”是 Site 项目所在的解决方案文件夹......我已经简化了这篇文章的内容,因为解决方案中实际上有多个应用程序。)
<Target Name="BuildWebPackage">
<MSBuild Projects="..\Publisher\Publisher.sln"
Targets="Applications\Site:Package"/>
</Target>

我认为这是 SolutionFolder\ProjectName:Target语法是如何做到这一点,因为 :Clean运行...但是,这会抛出
error MSB4057: The target "Applications\Site:Package" does not exist in the project.

尝试 2

现在是丑陋的解决方案:如果我修改我的所有库以为这 4 个解决方案配置提供 4 个附加配置,它就可以工作。但是,如果我以后想与具有不同环境的项目共同开发一个共享库,这很丑陋,而且确实是一个糟糕的计划。此外,这些环境与库无关,仅在使用库的顶级应用程序的上下文中才有意义。味道不好。

嗯?

我喜欢解决方案中的多个环境,以及花哨的新 Web.config 替换内容,但我不知道如何调用 msdeploy Package在这种情况下执行任务,因此我可以在 TeamCity 中构建包。

(请注意,我可能不想调用 msdeploy 命令行,因为它用于将 IIS 应用程序转换为包。不是我在这里所做的。)

样本

再一次,我在这里完全被难住了,所以如果你想帮助实验,我已经整理了 this sample solution .

最佳答案

第一次尝试失败,因为解决方案文件中不存在包目标。在解决方案文件上使用 MSBuild 时,会创建一个临时的 MSBuild 项目 (SamplePackage.sln.metaproj);该项目文件仅包含一些目标(Build、Clean、Rebuild、 Publish ,...)
解决方案:DeployOnBuild & DeployTarget 属性
做你想做的事情的一种方法是使用 部署构建 像这样的属性(property):

<PropertyGroup Condition="'$(Configuration)' == ''">
<Platform>Any Cpu</Platform>
<Configuration>Dev</Configuration>
<PackageLocation>$(MSBuildProjectDirectory)\package.zip</PackageLocation>
</PropertyGroup>

<Target Name="Build">
<MSBuild Projects="SamplePackage.sln"
Targets="Build"/>
</Target>

<Target Name="BuildWebPackage">
<MSBuild Projects="SamplePackage.sln"
Properties="Platform=$(Platform);
Configuration=$(Configuration);
DeployOnBuild=true;
DeployTarget=Package;
PackageLocation=$(PackageLocation);"/>
</Target>
  • DeployOnBuild=true : 必须在 Build 调用时进行部署
  • DeployTarget=包 : 为部署创建一个包
  • 包裹位置 :表示包文件的文件路径

  • 附加链接:
  • Creating web packages using MSBuild
  • How can I get TFS2010 to run MSDEPLOY for me through MSBUILD?
  • How to "Package/Publish" Web Site project using VS2010 and MsBuild
  • Automated Deployment in ASP.NET 4 - Frequently Asked Questions
  • 关于.net - 具有多个环境的 MsBuild 和 MsDeploy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3497771/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com