visual - Obtenga la ejecución del nombre del ensamblado desde la DLL a la que se hace referencia en C#
error criptográfico al firmar el ensamblado visual studio (8)
¿Cuál es la mejor manera de obtener el nombre de la aplicación (es decir, MyApplication.exe) del conjunto de ejecución de una biblioteca de clases a la que se hace referencia en C #?
Necesito abrir la aplicación app.config para recuperar algunas variables appSettings para la DLL referenciada.
Si desea obtener el archivo de configuración del dominio actual, entonces todo lo que necesita hacer es:
ConfigurationManager.AppSettings
....
(Esto requiere una referencia a System.Configuration, por supuesto).
Para responder a su pregunta, puede hacerlo como dijo Ray (o use Assembly.GetExecutingAssembly().FullName
) pero creo que el problema se resuelve más fácilmente usando ConfigurationManager
.
Para obtener el nombre exacto sin versiones, etc. use:
string appName = Assembly.GetEntryAssembly().GetName().Name;
Funciona con .NET v1.1 y posterior.
Nunca debe asociar sus bibliotecas a un consumidor (en este caso, Web, WinForm o la aplicación WCF). Si su biblioteca necesita configuración, entonces DÁGALA a la biblioteca.
No codifique la biblioteca para extraer esos datos del archivo de configuración del consumidor. Proporcione constructores sobrecargados para esto (para eso están).
Si alguna vez ha mirado el objeto ConfigurationManager.AppSettings
, simplemente es NameValueCollection
. Así que cree un constructor en su biblioteca para aceptar una NameValueCollection
y NameValueCollection
que su consumidor DÉ esos datos a la biblioteca.
//Library
public class MyComponent
{
//Constructor
public MyComponent(NameValueCollection settings)
{
//do something with your settings now, like assign to a local collection
}
}
//Consumer
class Program
{
static void Main(string[] args)
{
MyComponent component = new MyComponent(ConfigurationManager.AppSettings);
}
}
Si quieres leer (y mostrar) el número de versión:
Assembly ass = System.Reflection.Assembly.GetExecutingAssembly();
AssemblyName assname = ass.GetName();
Version ver=assname.Version;
En algún lugar de la aplicación (es decir, bloque de título en forma de Windows)
this.Text = "Your title Version " + ver;
Para obtener la respuesta al título de la pregunta:
// Full-name, e.g. MyApplication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
string exeAssembly = Assembly.GetEntryAssembly().FullName;
// or just the "assembly name" part (e.g. "MyApplication")
string exeAssemblyName = Assembly.GetEntryAssembly().GetName().Name;
Como mencionó @Ben, ya que mencionaste querer obtener la información de configuración, usa la clase ConfigurationManager
.
Puede obtener el ensamblado a través del tipo de clase ...
typeof(MyClass).Assembly
Si desea el nombre del EXE principal y no del conjunto de DLL al que se hace referencia, deberá usar esto:
Assembly.GetEntryAssembly().GetName().Name
Esto devolverá el nombre EXE (menos la parte .EXE).
Usar GetExecutingAssembly () no es correcto según la pregunta del OP (¡primer párrafo!) Ya que devolverá el nombre de la DLL.
Para el nombre abreviado de un ensamblado de una instancia de clase:
Me.GetType ().Assembly.GetName().Name