VS2010:如何在Post-Build中使用环境变量

时间:2013-08-04 11:55:32

标签: visual-studio-2010 environment-variables

在我的电脑上,我创建了一个名为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中使用环境变量的正确方法是什么?

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

5 个答案:

答案 0 :(得分:4)

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

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

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

其他是系统范围的变种。

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

我在V2010 SP1上

答案 1 :(得分:2)

'%'字符由MSBuild保留,因此您必须使用MSDN中记录的%25十六进制转义序列替换它。

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

答案 2 :(得分:2)

使用VS 2019

如果要在事件中分配变量,例如...。

设置ABC = 123

然后,您将不能使用$(ABC),因为在将$(ABC)交给命令行运行之前,它已经得到处理。

您必须使用命令行所使用的%ABC%。它不知道$(ABC)是什么,因为只有Visual Studio才能理解。

为了进一步使事情复杂化,Visual Studio事件编辑器使用%作为转义符。我已经注意到以%D开头的东西是不好的,%K,%Z和%K是好的。

显然,您可以将%25用作%的转义符。

因此%25DESDIR%25可以工作,因为转义时出现乱码,因此%DESTDIR%无效。

答案 3 :(得分:0)

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".

但是,在项目proerties对话框中使用URL转义似乎有效:

ECHO %25CD%25

答案 4 :(得分:0)

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

回声 $(BIN_PATH)

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

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

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