环境变量在MSBuild项目之间丢失

时间:2010-05-20 15:31:53

标签: .net visual-studio-2010 msbuild wix wix3.5

我有一个包含以下项目的.NET解决方案:

  • 网络应用程序(WAP)
  • Web部署(WDP,.wdproj)
  • wix setup(WIX,.wixproj)

在WDP中,我使用自定义MSBuild任务(SetEnvVar)来设置一些环境。用于在构建过程中进一步使用的变量。设置后我可以毫无疑问地使用它们。 在WDP中但在WIX中它们是空的/未定义的。奇怪的是,当我引用那些环境时。 WIX文件中的变量(通过使用.wxs中的属性或.wxi中的preproc变量)我得到了预期的值。

你知道为什么env。 vars在.wixproj中丢失/未定义?

顺便说一句,(解决方案)构建过程是从VS 2010内部触发的。

更新

这基本上是我的任务代码:

Environment.SetEnvironmentVariable(this.Variable, this.Value);

MSBuild解决方案是否构建不是一个进程?

MSBuild会为解决方案中的每个项目生成一个新进程吗?

2 个答案:

答案 0 :(得分:1)

你的SetEnvVar任务是否有可能为单个进程设置环境变量而不是全局(它应该做到安全btw)?在这种情况下,很可能WIX thingie以某种方式作为一个不同的进程启动,所以使用它自己的当前全局环境集的私有副本。

答案 1 :(得分:0)

以下是项目文件的重要部分:

WDP(.wdproj)

<Target Name="AfterBuild">
    <SetEnvVar Variable="MAJOR" Value="$(MajorNumber)" />
    <SetEnvVar Variable="MINOR" Value="$(MinorNumber)" />
    <SetEnvVar Variable="REVISION" Value="$(RevisionNumber)" />
    <SetEnvVar Variable="BUILD" Value="$(BuildNumber)" />        
</Target>

WIX(.wixproj)

<Target Name="AfterBuild">
    <Message Text="Major: $(MAJOR) Minor: $(MINOR) Revision: $(REVISION)" />
    <Move SourceFiles=".\bin\$(Configuration)\$(OutputName).msi" DestinationFiles=".\bin\$(Configuration)\Product_$(MAJOR).$(MINOR).$(REVISION).msi" />        
</Target>

Message任务的日志输出是“Major:Minor:Revision:”因此 MAIX,MINOR和REVISION vars不适用于WIX项目,因此MSI包名称为产品_... msi

项目构建顺序当然是WAP - &gt; WDP - &gt; WIX。