根据条件编译符号更改exe的名称

Pat*_*ick 9 c# msbuild conditional-compilation visual-studio

您是否可以告诉Visual Studio输出不同的exe文件名,具体取决于是否设置了特定的条件编译符号?

Fre*_*örk 11

如果将.csproj文件加载到文本编辑器中,则可以控制该AssemblyName属性:

<AssemblyName Condition="'$(Configuration)' == 'Debug'">WindowsFormsApplication9.Debug</AssemblyName>
<AssemblyName Condition="'$(Configuration)' != 'Debug'">WindowsFormsApplication9</AssemblyName>
Run Code Online (Sandbox Code Playgroud)

请注意,这不仅会更改文件名,还会更改程序集名称,如果您有其他引用程序集的代码,则可能会出现问题.

我自己从来没有这样做,所以我不能说这个想法有多好或多坏.

  • 由于如果向assemblyname添加条件,Visual Studio似乎会崩溃,这不起作用.但是,您可以将Assemblyname标记移动到具有已定义条件的属性组... (2认同)

Pat*_*ick 5

由于Fredrik建议的为assemblyname标记定义条件似乎使Visual Studio变得怪异,您可以稍后在csproj文件中更改程序集名称.使用Choose元素有点像if语句,因此如果满足条件,则可以附加名称,如下所示.

在例如DefineConstants条件属性中获取子字符串似乎不可能(根据MSDN)使用"普通的vanilla MSBuild",但是可以定义自己的构建目标并在使用/p:Tag=value(MSBuild命令行参考)进行编译时设置属性

  ...
  <Tag>true</Tag>
</PropertyGroup>
<Choose>
  <When Condition=" '$(Tag)' == 'true' ">
    <PropertyGroup>
      <AssemblyName>$(AssemblyName).TagDefined</AssemblyName>
    </PropertyGroup>
  </When>
</Choose>
<ItemGroup>
...
Run Code Online (Sandbox Code Playgroud)