如何在C#Compact Framework中获取exe应用程序名称和版本

cja*_*cja 33 c# versioning compact-framework

我的应用程序有一个exe并使用一些DLL.我用C#写所有内容.

在一个DLL中,我想编写一个方法来从exe中的版本信息中获取应用程序名称和版本.

据我所知,在完整的.NET中,我可以使用GetEntryAssembly,但这在CF中是不可用的.

cta*_*cke 75

获取应用名称:

System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
Run Code Online (Sandbox Code Playgroud)

获得版本:

System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
Run Code Online (Sandbox Code Playgroud)

您可能希望GetCallingAssembly()按类型使用或获取程序集(例如typeof(Program).Assembly),如果您的DLL尝试获取EXE版本并且您无法立即访问它.

编辑

如果你有一个DLL,并且你需要可执行文件的名称,你有几个选项,具体取决于用例.您可以从EXE程序集中包含的类型获取程序集,但由于DLL很少引用EXE,因此需要在该类型的对象中传递EXE.

Version GetAssemblyVersionFromObjectType(object o)
{
    o.GetType().Assembly.GetName().Version;
}
Run Code Online (Sandbox Code Playgroud)

你也可以像这样做一些结束运行:

[DllImport("coredll.dll", SetLastError = true)]
private static extern int GetModuleFileName(IntPtr hModule, StringBuilder lpFilename, int nSize);

...

var name = new StringBuilder(1024);
GetModuleFileName(IntPtr.Zero, name, 1024);
var version = Assembly.LoadFrom(name.ToString()).GetName().Version;
Run Code Online (Sandbox Code Playgroud)


Roh*_*S D 18

System.Reflection.Assembly.GetEntryAssembly().GetName().Version;

此函数将提供从其他库加载的应用程序版本.

System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;

这将给出当前库的版本.如果你在应用程序库中调用它,你将获得应用程序版本,如果在DLL中调用它,那么将获得该DLL版本.

所以在我看来System.Reflection.Assembly.GetEntryAssembly().GetName().Version; 是使用当前功能.


Beh*_*zad 6

如果要创建用于另一个应用程序引用的组件(.dll)以获取主应用程序名称和版本,则可以使用以下方式:

获取主应用名称:

AppDomain.CurrentDomain.DomainManager.EntryAssembly.GetName().Name;
Run Code Online (Sandbox Code Playgroud)

获取版本:

AppDomain.CurrentDomain.DomainManager.EntryAssembly.GetName().Version.ToString();    
Run Code Online (Sandbox Code Playgroud)

获取全名(包含:应用程序名称,应用程序版本,区域性,publicKeyToken):

AppDomain.CurrentDomain.DomainManager.EntryAssembly.FullName;
Run Code Online (Sandbox Code Playgroud)

但是在此解决方案中,存在一个问题,该问题取决于主机,并且如果它直接从可执行文件运行,则会发生错误。因此,以下选举:

获取主应用名称:

string appName = AppDomain.CurrentDomain.FriendlyName;
appName = appName.Substring(0, appName.IndexOf('.'));
Run Code Online (Sandbox Code Playgroud)

获取版本:

System.Windows.Forms.Application.ProductVersion;
Run Code Online (Sandbox Code Playgroud)

  • 我认为这个答案没有得到足够的认可。 (4认同)