我有一个包含以下项目的.NET解决方案:
在WDP中,我使用自定义MSBuild任务(SetEnvVar)来设置一些环境。用于在构建过程中进一步使用的变量。设置后我可以毫无疑问地使用它们。 在WDP中但在WIX中它们是空的/未定义的。奇怪的是,当我引用那些环境时。 WIX文件中的变量(通过使用.wxs中的属性或.wxi中的preproc变量)我得到了预期的值。
你知道为什么env。 vars在.wixproj中丢失/未定义?
顺便说一句,(解决方案)构建过程是从VS 2010内部触发的。
更新
这基本上是我的任务代码:
Environment.SetEnvironmentVariable(this.Variable, this.Value);
MSBuild解决方案是否构建不是一个进程?
MSBuild会为解决方案中的每个项目生成一个新进程吗?
答案 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。