I'm debugging "xiixtasks.exe", a C# console-mode application in VS2008.
I'm trying to get the version info from xiixtasks.exe.
When I try "Process.GetCurrentProcess()", it gives me the filename and version info for vshost.exe, NOT xiixtasks.exe:
// WRONG: this gives me xiixtasks.vhost.exe, version 9.0.30729.1
// I *want* "xiixtasks.exe", version 1.0.0.1024
System.Diagnostics.FileVersionInfo fi =
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileVersionInfo;
What should I be doing instead?
Thank you in advance!
======================================================
Solution:
1) The initial problem was indeed the IDE's "vshost" wrapper. One workaround would have been to change the build settings.
2) Assembly.GetExecutingAssembly().CodeBase is an excellent solution - thank you!. It works inside and outside the debugger.
3) Unfortunately, when I tried calling it with a function that expected a normal file path (instead of a URI like GetExecutingAssembly()" gives you), it died with a "Uri formats are not supported" exception.
4) Final solution: call GetExecutingAssembly(), then Uri.LocalPath ():
...
else if (cmdArgs.cmd.Equals(CmdOptions.CMD_SHOW_VERSION))
{
string codeBaseUri =
Urifile.System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
string codeBase =
new Uri (codeBaseUri).LocalPath;
string sVersion = Util.GetWindowsVersion(codeBase);
System.Console.WriteLine ("version({0}): {1}: ",
Util.Basename(codeBase), sVersion);
}
Thank you once again, all!
Full Path of your assembly:
Assembly.GetExecutingAssembly().CodeBase.Dump();
You can always extract the name with Path.GetFileName
:
string codeBase = Assembly.GetExecutingAssembly().CodeBase;
string name = Path.GetFileName(codeBase);