在 VS2010 项目中更改输出目录不起作用

Posted

技术标签:

【中文标题】在 VS2010 项目中更改输出目录不起作用【英文标题】:Changing output directory in VS2010 project doesn't work 【发布时间】:2013-02-19 03:16:36 【问题描述】:

我已将多个项目合并为一个解决方案。我创建了空的解决方案并添加了这些项目,下面是它的外观蓝图:

Root:
 Project1 - directory
 Project2 - directory
 Debug - directory
 Main.sln - file

现在我想将两个项目中的可执行文件和 dll 定向到解决方案文件中显示的 \debug 文件夹。我进入项目属性>>配置属性>>常规>>“输出目录”并将output directory更改为$(SolutionDir)$(Configuration)\,这是新项目的默认设置。

问题在于它对创建输出文件的位置没有影响,它仍然是在旧目标中创建的。 `Output Directory' 的旧路径是 .\Debug\ 并不重要。

这可能是因为 SolutionDirConfiguration 可能没有定义吗?我在哪里可以看到他们的定义或价值观?我还想创建一个新配置,即“带调试发布”我如何使用环境变量创建它?谢谢!

我的项目是 MFC/Visual C++。

插件: 这些标识符(如SolutionDir)在脚本中定义在哪里?我在 .vcxproj 文件中查找,但有提及。我创建了一个新的虚拟 VS2010 项目,只是为了查看它的 .vcxproj 文件,但这些已识别的项目设置未在我能看到的任何地方定义!

【问题讨论】:

【参考方案1】:

这很可能是由覆盖全局设置的特定设置引起的,即链接器的“输出”设置。这通常是从早期 Visual Studio 转换而来的结果。

您需要完成所有设置,注意那些值以粗体书写的设置,并使用“调试”或“发布”以及其他必要的设置重置为默认值(从下拉列表中选择)。

文件也可能有特定的设置。我通常通过在记事本中打开项目并删除任何过多的设置来解决此问题。小心点。在 Notepad++ 或任何其他功能强大的编辑器中使用多行替换会有所帮助。

【讨论】:

你是对的,该项目是从早期的 Visual Studio (VC6!) 转换而来的【参考方案2】:

我的一个 VS2010 项目中的中间目录设置有类似的问题。无论我将其设置为什么,它都将始终使用 $(SolutionDir)$Configuration 的默认值。奇怪的是,同一解决方案中具有相同设置的其他项目运行良好。

玩了一圈之后,我偶然发现了一个解决方案。

    点击属性页对话框中的设置。 点击编辑框右侧的向下箭头按钮。 选择“从父​​级或项目默认值继承”。 点击“应用”。 单击设置并将其更改为所需的值。

我不知道为什么会这样,但确实如此。似乎无论出于何种原因,宏都没有被正确评估。然后,在您应用继承的值后,它似乎会自行重置并开始正确评估宏。

【讨论】:

【参考方案3】:

我想我也有类似的问题。

我最终做的是直接编辑 vcxproj 文件。找到此部分并针对您的每个配置进行编辑:

  <PropertyGroup>
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
  </PropertyGroup>

【讨论】:

我尝试了这个略有不同,因为在我的项目文件中,相关的 PropertyGroup 设置有点不同。 &lt;PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"&gt; &lt;OutDir&gt;$(SolutionDir)$(Configuration)\&lt;/OutDir&gt; &lt;IntDir&gt;.\Debug\&lt;/IntDir&gt; &lt;LinkIncremental&gt;true&lt;/LinkIncremental&gt; &lt;/PropertyGroup&gt; 我将上面的 OutDir 更改为您的文本。这是一个 dll 项目,通过这个更改,它实际上只有 .pdb 文件,它仍然在原始调试文件夹中创建所有其他文件。我应该将上述部分创建为新部分吗? 我在 VS2010 中创建了一个新项目并打开它的项目文件以查找 OutDir 并且它甚至不存在!知道 Visual Studio 会保留执行这些操作的项目设置吗?我认为它必须是项目文件,但我什至在那里搜索了 Configuration(目标文件夹),但即使这样也不存在。 如果不存在则使用默认值。默认值是由解决方案设置驱动的。您是否注意到,当您创建项目时,它会要求您创建解决方案以及为解决方案创建文件夹的选项。当它这样做时,它会自动在解决方案中创建用于调试/发布的文件夹,但在项目中创建中间文件夹 所以我创建了一个空解决方案并将这些项目添加到其中。我的整个想法是,空解决方案将为我提供它确实提供的主调试/发布文件夹结构,但只有文件不会发送给它。不过听起来确实有点奇怪,在我看来,一个项目不需要知道解决方案,因为解决方案应该知道它的项目。

以上是关于在 VS2010 项目中更改输出目录不起作用的主要内容,如果未能解决你的问题,请参考以下文章

VS2010导入/导出设置不起作用

如何在 VS 2010 中出现第一个错误时停止 C# 编译(VS 2008 宏不起作用)!

c#程序在VS2010调试中涉及Web Service工作,但在内置发布时不起作用

为啥 DragDrop 在 VS2010 下不起作用?

使用属性更改简单绑定到用户控件在 vs 扩展工具窗口中不起作用

VS 2010 - 带有 MySql 存储过程的实体框架似乎不起作用