1

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

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

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

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

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

更新

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

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

MSBuild 解决方案构建不是一个过程吗?

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

4

2 回答 2

1

您的 SetEnvVar 任务是否可以为单个进程而不是全局设置环境变量(为了安全起见,应该这样做)?在这种情况下,WIX 很可能是以某种方式作为不同的进程启动的,因此它是当前全局环境集的私有副本。

于 2010-05-20T16:06:27.597 回答
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:”,因此 MAJOR、MINOR 和 REVISION 变量不适用于 WIX 项目,因此 MSI 包名称为Product_...msi

项目构建顺序当然是 WAP -> WDP -> WIX。

于 2010-05-21T11:50:13.887 回答