【问题标题】:VS2008 - Outputting a different file name for Debug/Release configurationsVS2008 - 为调试/发布配置输出不同的文件名
【发布时间】:2010-11-08 18:20:32
【问题描述】:

使用 Visual Studio 2008 构建 C# 应用程序时,是否可以为每个配置设置不同的输出文件名?

e.g.

MyApp_Debug.exe
MyApp_Release.exe

我尝试了一个后期构建步骤,通过附加当前配置来重命名文件,但这似乎是一种草率的方法。另外,这意味着 Visual Studio 在按 F5 开始调试时无法再找到该文件。

【问题讨论】:

标签: c# .net visual-studio visual-studio-2008 build-process


【解决方案1】:

您可以通过手动编辑项目文件来实现此目的。找到<AssemblyName> 节点并向其添加条件属性:

<AssemblyName Condition="'$(Configuration)'=='Debug'">MyApp_Debug.exe</AssemblyName>
<AssemblyName Condition="'$(Configuration)'=='Release'">MyApp_Release.exe</AssemblyName>

您还必须复制它才能为发布版本添加另一个条件属性。

虽然有可能,但可能会导致问题。有一个AssemblyConfiguration 属性可以应用于您的程序集。在AssemblyInfo.cs,输入:

#if DEBUG
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif

这将为您的已编译程序集添加一个属性,该属性将告诉您应用程序是使用哪种构建配置构建的。

【讨论】:

  • 很好奇...Visual Studio 不是已经添加了 AssemblyConfiguration,那么您是否进行了构建?
  • 我不必添加手动 AssemblyConfiguration 行来完成这项工作。 AssemblyInfo.cs 使用 [assembly: AssemblyConfiguration("")] 但是我确实必须将 AssemblyName 语句移动到具有条件的现有属性组中,而不是将条件直接放在 AssemblyName 上。
  • @DeniseSkidmore:我最初的回答并不清楚,但这是实现相同结果的两种选择。就个人而言,我更喜欢纯代码方法。
【解决方案2】:

我确定有,但是根据我的经验,为调试/发布配置使用不同的文件名是一个坏主意,因为它可能导致各种问题(非常类似于 VS 在尝试执行重命名的应用程序时遇到的问题)

为什么不在Assembly 属性中简单地指出它是否调试/发布(例如在cmets 中)

【讨论】:

    【解决方案3】:

    正如 adrianbanks 提到的,您可以手动编辑 .csproj 文件来完成此操作。

    不过,我会推荐更简单的形式:

    <AssemblyName>MyApp_$(Configuration).exe</AssemblyName>
    

    但是,如果您曾经编辑过此项目的属性,则很可能会丢失此更改。您必须手动掌握它,因为它不会成为受支持的设置。

    要手动编辑您的项目定义,请在 Visual Studio 中右键单击该项目,然后选择“卸载”,然后右键单击已卸载的项目,然后选择“编辑”,它将为您打开 XML 定义。

    【讨论】:

    • 这就是所有可能解决方案的问题所在。 Visual Studio 不允许您编辑项目文件以包含 MSBuild 的全部功能。您所做的任何更改都必须在 Visual Studio 之外进行管理。至少通过此更改,您可以在 Visual Studio 中看到它的效果。
    猜你喜欢
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 2015-06-20
    • 2015-02-14
    • 2012-02-19
    • 1970-01-01
    相关资源
    最近更新 更多