我在VS2008中有一个包含多个项目的C ++解决方案。此解决方案包含运行时所需的文件,这些文件是根据相对于解决方案目录的路径加载的(例如"Testing/data/" + "dataN.bin"
)。
为了使此解决方案有效,我必须在项目中设置工作目录设置,以便它指向解决方案目录(例如Configuration Properties >> Debugging >> Working Directory = $(SolutionDir)
)。当我在自己的电脑上调试时,这很好用。但是,当其他用户加载我的解决方案时,他的项目没有正确设置此属性。
我跟踪此设置不是存储在项目文件(PROJECT.vcproj
)中,而是存储在为其创建的用户特定文件中(PROJECT.vcproj.DOMAIN.USER.user
)。
我想为所有用户存储此设置的方法,而不必一次又一次地手动设置。
我的想法是:
但是,我没有办法做到这两种方法。
更多注释/限制:
任何帮助将不胜感激......提前感谢。
答案 0 :(得分:10)
下面提供了示例PROJECT.vcproj.user文件
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="9,00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(ProjectDir)..\Deploy\$(ConfigurationName)\$(TargetFileName)"
WorkingDirectory="$(ProjectDir)..\Deploy\$(ConfigurationName)\"
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="LOCALHOST"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor="0"
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(ProjectDir)..\Deploy\$(ConfigurationName)\$(TargetFileName)"
WorkingDirectory="$(ProjectDir)..\Deploy\$(ConfigurationName)\"
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="LOCALHOST"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor="0"
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>
答案 1 :(得分:4)
不存在此类财产。存在更大的问题,在部署解决方案后,这也需要工作。然后,工作目录不会成为“解决方案”目录,目标计算机上没有目录。
假设工作目录与EXE目录相同,那么你的工作要好得多。这将是调试时和目标机器上的默认值。您可以使用链接器设置完全控制EXE文件的位置。并且您可以通过获取代码中的EXE目录来保护自己免受使用其他工作目录运行程序的快捷方式的影响,以便生成绝对路径。使用GetModuleFileName(),传递NULL以获取EXE文件的路径。
另一个标准解决方案是将EXE所需的任何类型的资源复制到与构建输出文件夹相关的文件夹中。您可以使用Pre-Build事件执行此操作,使命令行看起来类似于:
if not exist "$(OutDir)\Testing" md "$(OutDir)\Testing"
xcopy /d /s "$(SolutionDir)\Testing\*.*" "$(OutDir)\Testing
请注意/ d选项如何确保仅在测试文件夹内容发生更改时才进行复制。
答案 2 :(得分:1)
您可以考虑使用“配置属性/常规/输出目录”或“配置属性/链接器/输出文件”,而不是“调试器/工作目录”设置。这些设置是按项目而不是按用户设置的,如果您保持工作目录不变,则此是应用程序工作目录的默认值。
答案 3 :(得分:0)
我想知道这是否可行,因为用户可能没有足够的权限来访问和读/写目录,我想VS会检查用户是否有权访问目录,这可能就是为什么只有基于帐户的选项。