Can you tell Visual Studio to output a different name of an exe file depending on if a specific conditional compilation symbol is set?
相关问题
- Sorting 3 numbers without branching [closed]
- Graphics.DrawImage() - Throws out of memory except
- Why am I getting UnauthorizedAccessException on th
- 求获取指定qq 资料的方法
- How to know full paths to DLL's from .csproj f
Since defining a condition to the assemblyname tag as suggested by Fredrik seems to make Visual Studio cranky, you can change the assembly name later in the csproj file. Using the Choose element is kind of like an if statement, so a name can be appended if a condition is met, demonstrated below.
Getting a substring out of for instance
DefineConstants
in a condition attribute does not seem possible (according to MSDN) with "plain vanilla MSBuild", but one can define their own build targets and set a property when compiling with a/p:Tag=value
(MSBuild command line reference)You can edit the csproj file, which is just an MSBuild file which contains 'tasks'. There is a section in the csproj file which is called 'AfterBuild'.
Perhaps, you can add a command there which renames your exe file to the filename of your choice.
(Offcourse, You'll have to uncomment that section).
Perhaps something like this:
I haven't worked it out further, but you should complete the Condition attribute, so that you can check whether the conditional symbol is defined or not.
If you load the .csproj file into a text editor, you can control the
AssemblyName
property:Note though that this does not only change the file name, but the assembly name, which might mean trouble if you have other code referencing the assembly.
I never did this myself, so I can't really say how good or bad the idea is.
None of the answers here works for me.
They either produce errors or do nothing.
Here is my solution that works in VS2005 and I suppose it will also work in newer VS versions. Edit the file *.csproj like this:
The result will be that a 32 bit compilation produces a file
ProjectName_32.exe
and a 64 bit build producesProjectName_64.exe
.Please note the strange syntax. There must be no parenthesis around the
if
condition and thex86
must not be in quotes.The disadvantage of this method is that you cannot start your Exe in the debugger anymore because Visual Studio does not find the Exe that it has generated. This could be solved by replacing the 'move' command with the 'copy' command but in this case you would have to copy the Exe to another directory because surely you don't want to have the same file twice in the same directory.
All this is a mess. It is really incredible that you can enter the output directory directly in the project settings but to do something really basic as changing the Exe name you must write such a clumsy script which has ugly side effects. Shame on Microsoft!