特定の条件付きコンパイルシンボルが設定されているかどうかに応じて、異なる名前のexeファイルを出力するようにVisual Studioに指示できますか?
4 に答える
.csprojファイルをテキストエディタにロードすると、AssemblyName
プロパティを制御できます。
<AssemblyName Condition="'$(Configuration)' == 'Debug'">WindowsFormsApplication9.Debug</AssemblyName>
<AssemblyName Condition="'$(Configuration)' != 'Debug'">WindowsFormsApplication9</AssemblyName>
ただし、これによってファイル名だけでなくアセンブリ名も変更されることに注意してください。これは、アセンブリを参照する他のコードがある場合に問題を引き起こす可能性があります。
私はこれを自分でやったことがないので、アイデアがどれほど良いか悪いかは本当に言えません。
Fredrikによって提案されたようにassemblynameタグに条件を定義すると、Visual Studioが不安定になるように思われるため、後でcsprojファイルでアセンブリ名を変更できます。Choose要素の使用はifステートメントのようなものであるため、以下に示すように、条件が満たされた場合に名前を追加できます。
たとえば、条件属性からサブストリングを取得することは( MSDNDefineConstants
によると)「plainvanilla MSBuild」では不可能のようですが、 (MSBuildコマンドラインリファレンス)を使用してコンパイルするときに、独自のビルドターゲットを定義してプロパティを設定できます。/p:Tag=value
...
<Tag>true</Tag>
</PropertyGroup>
<Choose>
<When Condition=" '$(Tag)' == 'true' ">
<PropertyGroup>
<AssemblyName>$(AssemblyName).TagDefined</AssemblyName>
</PropertyGroup>
</When>
</Choose>
<ItemGroup>
...
csprojファイルを編集できます。これは、「タスク」を含む単なるMSBuildファイルです。csprojファイルには、「AfterBuild」というセクションがあります。
おそらく、exeファイルの名前を選択したファイル名に変更するコマンドをそこに追加できます。
(オフコース、そのセクションのコメントを解除する必要があります)。
おそらくこのようなもの:
<Target Name="AfterBuild">
<Copy SourceFiles="" DestinationFiles="" Condition="" />
<Delete Files="" Condition="" />
</Target>
これ以上の作業はしていませんが、条件シンボルが定義されているかどうかを確認できるように、Condition属性を完了する必要があります。