VS2008 - 在 Debug/Release 配置下输出不同的文件名

25

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

e.g.

MyApp_Debug.exe
MyApp_Release.exe

我尝试了一个在编译后重命名文件的步骤,方法是添加当前配置,但这似乎是一种不太好的方式。此外,这意味着当按下F5开始调试时,Visual Studio无法找到该文件。


2
请看这里:https://dev59.com/K3NA5IYBdhLWcg3wn_Q1#893238 - Martin Harris
3个回答

34
你可以通过手动编辑项目文件来实现此目的。找到<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吗? - cecilphillip
我不需要添加手动的AssemblyConfiguration行来使其工作。AssemblyInfo.cs使用[assembly: AssemblyConfiguration("")]。但是,我必须将AssemblyName语句移动到现有的带条件的属性组中,而不是直接在AssemblyName上放置条件。 - Denise Skidmore
@DeniseSkidmore:从我的原始答案中并不清楚,但这两种方法都可以达到相同的结果。个人而言,我更喜欢仅使用代码的方法。 - adrianbanks

11

正如adrianbanks所提到的,您可以手动编辑.csproj文件来实现此目的。

然而,我建议采用更简单的方法:

<AssemblyName>MyApp_$(Configuration).exe</AssemblyName>
如果你编辑该项目的属性,这个更改很可能会丢失。这是一个不被支持的设置,你需要手动去跟进它。要手动编辑项目定义,在Visual Studio中右键单击项目,选择“卸载”,然后右键单击已卸载的项目,选择“编辑”,就可以打开XML定义。

2
这就是所有可能解决方案的问题。Visual Studio不允许您编辑项目文件以包含MSBuild的全部功能。您所做的任何更改都必须在Visual Studio之外进行管理。至少通过此更改,您可以在Visual Studio中看到其效果。 - adrianbanks

-1

我相信有这种做法,但是根据我的经验,为调试/发布配置使用不同的文件名是一个坏主意,因为它可能会引起各种问题(非常像VS在尝试执行重命名应用程序时遇到的问题)

为什么不在程序集属性中简单地指示它是调试/发布版本(例如在注释中)呢?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接