繁体   English   中英

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

[英]Environment variables get lost between MSBuild projects

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

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

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

你有什么想法为什么环境。 vars丢失/在.wixproj中未定义?

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

更新资料

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

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

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

MSBuild是否会为解决方案中的每个项目产生新的流程?

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

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

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任务的日志输出为“主要:次要:修订:”,因此WIX项目不使用MAJOR,MINOR和REVISION变量,并且MSI包名称为Product _... msi

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM