在我的电脑上,我创建了一个名为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中使用环境变量的正确方法是什么?
(是的,目录存在,我不想明确设置路径的原因是我准备分享这个项目,下载后和建设之前别人必须采取的每一步都是另一个障碍。)
答案 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 项目变量相同,您可能仍然需要旧的 % 字符语法,因为“项目文件中的属性会覆盖环境变量的值。”