【问题标题】:VS2010: How to use Environment Variables in Post-BuildVS2010:如何在构建后使用环境变量
【发布时间】:2013-08-04 11:55:32
【问题描述】:

在我的 PC 上,我创建了一个名为 3DSMaxInstallDirectory 的系统环境变量

在命令行,如果我给了

echo %3DSMaxInstallDirectory%Plugins\

我明白了

D:\Program Files\Autodesk\3ds Max 2011\Plugins\

在 Visual Studio 中,我进入 Post-Build 部分

copy "$(TargetDir)$(TargetName).*" "$(3DSMaxInstallDirectory)Plugins\"

但是在构建时我得到了

Error   4   The command "copy "C:\Users\Sebastian\Documents\Visual Studio 2010\Projects\MaxBridge\MaxBridgeImporterPlugin\bin\Debug\MaxBridgePlugin.*" "Plugins\"
" exited with code 1.   MaxBridgeImporterPlugin

Google 上的结果令人困惑,其中包含以下建议:Visual Studio 不支持 EV、Visual Studio 确实支持 EV、Visual Studio 需要 %..% 和 Visual Studio 需要 $(..) - 而这些建议似乎都没有在我的电脑上工作。

在 Visual Studio 中使用我的环境变量的正确方法是什么?

(是的,该目录存在,我不想明确设置路径的原因是我准备分享这个项目,下载后和构建之前其他人必须采取的每一步都是另一个障碍。)

【问题讨论】:

  • 您是否以管理员身份运行 Visual Studio?
  • @JeanHominal,我刚试过但不幸的是它没有任何区别。
  • 在 vs2010 中使用 %var% 在后期构建中对我有用。
  • @rene,您能否发布完整的示例命令,以便我尝试一下,看看它是我的 PC 还是我的环境变量独有的?

标签: visual-studio-2010 environment-variables


【解决方案1】:

这适用于项目“构建事件”的构建后设置。

echo %CodeContractsInstallDir%
echo %DXSDK_DIR%
echo "%ONLYME%"

ONLYME 是我个人资料的用户变量中的环境变量。

其他的是系统范围的变量。

如果我以管理员身份启动 VS2010,则 ONLYME 保持为空,系统变量仍然具有预期的值。

我使用的是 V2010 SP1

【讨论】:

  • 谢谢你,因为我发现“3DSMaxInstallDirectory”不起作用,但“_3DSMaxInstallDirectory”可以。我相信这是由于 Visual Studio 在 csproj 中将 '%' 转义为 '%25',当解析时变为 "%253" & "DSMax..."。
  • 这很奇怪!对我来说,使用echo %My Environmental Variable%\Some Sub Directory 得到\Some Sub Directory;使用%25,正如其他人所建议的那样导致5My Environmental Variable's Value5\Some Sub Directory,使用%2实际上用echo给出了预期的结果,但后来没有xcopycopy!我用xcopy 尝试的所有东西都没有用它的实际值替换环境变量名称。
  • @MattArnold 这是什么 msbuild 版本,您使用的是 Windows 10 或类似的服务器操作系统,对吧?
  • @rene 我在 Windows 10 上,使用 Visual Studio 2019 构建,项目在 .NET 4.0 中 - 我如何找到 MSBuild 版本?
  • @MattArnold 在 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\ 打开命令提示符并运行 msbuild -ver。我希望它会说 16.0
【解决方案2】:

'%' 字符由 MSBuild 保留,因此您必须将其替换为 %25 十六进制转义序列,如 MSDN 中所述。

copy "$(TargetDir)$(TargetName).*" "%253DSMaxInstallDirectory%25\Plugins" 应该确实有效。但是:Visual Studio 的命令行编辑器正确显示它,但 MSBuild 然后错误地解释 %253。我不知道这是一个错误还是一个功能,但你不能以数字开头你的环境变量的名称。

【讨论】:

    【解决方案3】:

    Visual Studio 无法正确编码/解码 XML 配置文件中的“特殊”字符。我可以通过手动将命令转义为 URL (http://www.w3schools.com/tags/ref_urlencode.asp) 来使其按预期工作。

    ECHO %CD%
    

    导致输出日志:

    Target "PreBuildEvent" in file "blahblahblah"
        Task "Exec"
            Command:
            ECHO %CD%
            C:\blah\blah\blah\Debug
        Done executing task "Exec".
    

    但是,在项目属性对话框中使用 URL 转义似乎可以工作:

    ECHO %25CD%25
    

    【讨论】:

    • 我相信缺少的编码是当您通过GUI输入自定义命令时(当然,如果您编辑.vcxproj文件,您必须自己编码)。如果你想投反对票;发表评论。我遇到了这个问题,这就是我解决它的方法。编辑:澄清有/无编码的结果。
    【解决方案4】:

    根据MS Link,语法现在与使用项目文件变量相同,这意味着您不必再担心转义 % 字符了。例如,如果 BIN_PATH 是环境变量,并且在构建后步骤中添加了以下行:

    回显 $(BIN_PATH)

    此行将在构建后将 BIN_PATH 的值显示到输出窗口。

    但是,请注意,必须在启动 VS 之前定义环境变量。当我第一次尝试这个时,我损失了大约 45 分钟,然后我才恍然大悟,也许它不起作用的原因是因为 VS 在启动时加载了环境变量。所以,我退出了 VS,重新启动,它就像一个魅力。

    如果您的环境变量与 VS 项目变量相同,您可能仍需要旧的 % 字符语法,因为“项目文件中的属性会覆盖环境变量的值。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-27
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      相关资源
      最近更新 更多