在开始构建之前如何修改环境变量(不修改项目文件)

编程语言 2026-07-10

这比我之前的问题又进一步:我的上一个问题:

我把开发区域从 "C:\Development\workarea" 拆分为 "C:\Development\workarea\v1"、"C:\Development\workarea\v2" 等等,但现在又出现了一个问题:

构建过程基于一个环境变量 VSBuildPath,当前它被设为 C:\Development\workarea,但你可以想象这需要改成 C:\Development\vx(其中 vx 是我将要工作的版本)。

我当然可以创建一个预构建事件,如下所示:

set VSBuildPath=C:\Development\workarea\v1

……但这会在我的项目中创建以下条目(在 *.vcxproj 文件中):

<PreBuildEvent>
  <Command>set VSBuildPath=C:\Development\workarea\v1</Command>
</PreBuildEvent>
<PreBuildEvent>
  <Message>Set environment variable</Message>
</PreBuildEvent>

我不想这样:我不希望在我的个人电脑上以这种特定方式工作时修改项目文件。

我该如何实现?
也许可以通过 *.vcxproj.user 文件?
我应该如何处理这个?
……如果我在 *.vcxproj.user 文件中执行那条 set ...=... 命令,构建阶段是否会考虑到这个新值,如同真实的 *.vcxproj 文件所描述的那样?
我需要为每个单独的项目定义吗,还是可以在 *.sln 文件中定义?(是否存在 *.sln.user 文件?)

解决方案

显然有一个更好的解决方案:文件 "Directory.Build.props"。在其中你可以为一个环境变量定义一个新的值,只要你在该目录下使用Visual Studio,就会生效。

该文件的内容应如下所示:

<Project>
  <PropertyGroup>
    <VSBuildPath>C:\Development\workarea\v1</VSBuildPath>
  </PropertyGroup>
</Project>

在开始构建时,你可能会在构建输出中看到以下内容:

14:30:32:835    >C:\Development\workarea\v1\Directory.Build.props(3,5): 
                message : Property reassignment:
                $(VSBuildPath)="C:\Development\workarea\v1"
                (previous value: "C:\Development\workarea\") at
                C:\Development\workarea\v1\Directory.Build.props (3,5)

,这也证明确实在起作用。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章