Visual studio Visual Studio 2010生成后事件:传递当前FlavorToBuild

Visual studio Visual Studio 2010生成后事件:传递当前FlavorToBuild,visual-studio,powershell,msbuild,post-build-event,Visual Studio,Powershell,Msbuild,Post Build Event,我目前正在进行一个重新构建平台的项目,其中一部分涉及几十个网站,所有这些网站都使用一个公共标题。其中几个站点都位于同一台机器上,因此设置了一个符号链接,以便它们都可以引用相同的内容。某些其他网站是外部的,因此建立并使用了一个通用的“includes.company.com” 快进到今天,我正试图在VisualStudio中设置“includes.company.com”站点。内容很简单。我已经把它归结为一个HTML文件和一个CSS文件以及所有必要的图像 我现在试图完成的是基于当前的构建配置,输出

我目前正在进行一个重新构建平台的项目,其中一部分涉及几十个网站,所有这些网站都使用一个公共标题。其中几个站点都位于同一台机器上,因此设置了一个符号链接,以便它们都可以引用相同的内容。某些其他网站是外部的,因此建立并使用了一个通用的“includes.company.com”

快进到今天,我正试图在VisualStudio中设置“includes.company.com”站点。内容很简单。我已经把它归结为一个HTML文件和一个CSS文件以及所有必要的图像

我现在试图完成的是基于当前的构建配置,输出带有适当链接的HTML和CSS,这些链接可以从外部站点引用

我目前有一个生成后事件,看起来是这样

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -file "$(MSBuildProjectDirectory)\pbuild.ps1" "$(Configuration)" $(MSBuildProjectDirectory)
pbuild.ps1看起来像什么

param ([string]$config, [string]$target)

If ($config -eq "Debug")
{
    (get-content $target\common\css\stylesheet.min.css) -replace '{SERVER}', 'http://dev.includes.company.com' | set-content $target\Builds\$config\common\css\stylesheet.min.css
    (get-content $target\header.html) -replace '{SERVER}', 'http://dev.includes.company.com' | set-content $target\Builds\$config\header.html
}

If ($config -eq "QA")
{
    (get-content $target\common\css\stylesheet.min.css) -replace '{SERVER}', 'http://qa.includes.company.com' | set-content $target\Builds\$config\common\css\stylesheet.min.css
    (get-content $target\header.html) -replace '{SERVER}', 'http://qa.includes.company.com' | set-content $target\Builds\$config\header.html
}

If ($config -eq "Release")
{
    (get-content $target\common\css\stylesheet.min.css) -replace '{SERVER}', 'http://includes.company.com' | set-content  $target\Builds\$config\common\css\stylesheet.min.css
    (get-content $target\header.html) -replace '{SERVER}', 'http://includes.company.com' | set-content $target\Builds\$config\header.html
}
这对于调试和发布非常有用,但对于QA来说却不是。正如我逐渐发现的,变量$Configuration似乎只包含“Debug”或“Release”,而不是我正在寻找的实际活动配置

FlavorToBuild看起来很有希望,但我花了很长时间才将其拉到一个我可以使用的变量中


是否设置了一个变量来提供我要查找的内容,即活动构建配置的名称?有没有办法在项目文件中指定一个变量,然后将其输入到构建后事件中?这是我第一次真正进入这个世界,因此,对于如何实现这一目标的任何帮助或指导,我都表示高度赞赏

我似乎已经解决了这个问题,为每个构建在项目文件中添加了一两个属性

我最终得到了如下结果:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -file "$(MSBuildProjectDirectory)\pbuild.ps1" $(PowershellBuildEnv) $(MSBuildProjectDirectory) $(TargetSite)
pbuild.ps1现在已精简为:

param ([string]$config, [string]$target, [string]$replaceWith)

(get-content $target\common\css\stylesheet.min.css) -replace '{SERVER}', $replaceWith | set-content $target\Builds\$config\common\css\stylesheet.min.css
(get-content $target\header.html) -replace '{SERVER}', $replaceWith | set-content $target\Builds\$config\header.html
在项目文件中,我定义了$ReplaceWith和$PowershellBuildEnv,因为我认为它们适合于每个构建配置:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <PowershellBuildEnv>Debug</PowershellBuildEnv>
    <TargetSite>http://dev.includes.company.com</TargetSite>

调试
http://dev.includes.company.com
所以,在这一点上,似乎和我正在寻找的一样有效。这绝对是一次学习经历。

不应该是“$(配置名称)”而不是“$(配置)”。1.target比postbuild事件要好得多。2.您的脚本违反了规则$(配置)和$(配置名称)似乎给出了相同的结果。