使用msbuild,如何生成一次,然后使用多个转换配置文件发布?
我有一个.net解决方案,可以使用使用msbuild,如何生成一次,然后使用多个转换配置文件发布?,msbuild,web-deployment,Msbuild,Web Deployment,我有一个.net解决方案,可以使用msbuild构建,并成功生成一个带有PublishProfile.pubxml转换的部署包,用于部署到单个web服务器 我需要为不同的环境构建和生成部署包,这些包使用各种.pubxml概要文件设置为转换 我知道我可以分别构建每个概要文件,向构建中注入更改的风险可以忽略不计,但不需要消耗时间和空间。无论如何,我只会保留其中的一个,只需将每个转换中唯一的web.configs复制到它们自己的部署包文件夹中(如果不清楚,很抱歉,请澄清) 我正在寻找类似伪代码的东西,
msbuild
构建,并成功生成一个带有PublishProfile.pubxml
转换的部署包,用于部署到单个web服务器
我需要为不同的环境构建和生成部署包,这些包使用各种.pubxml
概要文件设置为转换
我知道我可以分别构建每个概要文件,向构建中注入更改的风险可以忽略不计,但不需要消耗时间和空间。无论如何,我只会保留其中的一个,只需将每个转换中唯一的web.config
s复制到它们自己的部署包文件夹中(如果不清楚,很抱歉,请澄清)
我正在寻找类似伪代码的东西,我知道它在语法上是不正确的,但应该能够理解这一点:
//步骤1
msbuild myapp.csproj target=Build
//步骤2
foreach($profileList中的profile){
msbuild myapp.csproj outputdir=“releaseDir/$profile”target=Publish publishProfile=$profile
}
我在Jenkins环境中工作,不能使用Visual Studio函数,除非它们作为命令行选项可用
我还拼命想让msdeploy
工作,我想这可能会简化一些,但就我的一生而言,我无法让它与tempAgent
选项一起工作,这是我在我的环境中真正想要的唯一方法。关于那场斗争的细节
提前谢谢
更新1:,但正如我在评论中所说的,它仍在创建多个部署包,这些包占用大量空间,并且不是必需的。我真正想要的是一种使用单个构建工件并创建Web.config文件的多个转换的方法。然后在部署时,复制构建工件和相应的配置文件。这真的是一次构建/多次部署
FWIW,这是我使用上面的链接得到的代码:
function Initialize-Build {
$ErrorActionPreference = 'Stop'
$appName = 'myApp'
$projsToBuild = 'Ui', 'DataService'
$projPath = "$appName/$appName"
$buildPath = 'obj/Release/Package/'
$releasePath = 'Release-Packages'
$commonArgs = '/p:Configuration=Release',
'/nologo',
'/verbosity:quiet'
}
function Invoke-Build {
foreach ($proj in $projsToBuild) {
$projName = $proj -eq 'Ui' ? 'WebUi' : $proj
$p = "$projPath.$proj/$appName.$projName.csproj"
$buildArgs = '/t:Clean,Build',
'/p:AutoParameterizationWebConfigConnectionStrings=False'
Write-Output "Building $p"
msbuild $p @commonArgs @buildArgs
if ($LASTEXITCODE) { exit 1 }
}
}
function Invoke-Transform {
$xformArgs = "/p:deployOnBuild=True", "/p:Targets=Publish"
foreach ($proj in $projsToBuild) {
$p = "$projPath.$proj/$appName.$projName.csproj"
$pubProfiles = 'Dev', 'QA', 'UAT', 'Prod'
foreach ($prof in $pubProfiles) {
Write-Output "Building $p ($prof)"
$pubProfileArg = "/p:PublishProfile=$prof"
msbuild $p @commonArgs @xformArgs $pubProfileArg
if ($LASTEXITCODE) { exit 1 }
}
}
}
. Initialize-PrivLogBuild
Invoke-Build
Invoke-Transform
我意识到我问的问题并不正确。当我开始搜索msbuild转换帖子时,我找到了一种方法来完成我需要的工作 我用
AfterBuild
目标更新了我正在构建的应用程序的.csproj文件
需要4个转换,每个转换都有自己的.config文件作为转换源。我很幸运,这些文件已经由应用程序开发人员创建
这是我最后使用的代码,放在.csproj文件的末尾,在
标记中。为了减少路径和文件名的重复,我创建了configDir
和xformFile
属性。我喜欢这种模式,因为它很容易扩展和通用
../../Release Packages/configs
Web.config
非常感谢这些帖子为这个解决方案指明了道路