รับชื่อชุดประกอบ


191

คลาสยกเว้นของ C # มีคุณสมบัติซอร์สซึ่งถูกตั้งค่าเป็นชื่อของชุดประกอบโดยค่าเริ่มต้น
มีวิธีอื่นในการรับสายที่แน่นอนนี้ (โดยไม่แยกสตริงอื่น)?

ฉันได้ลองทำสิ่งต่อไปนี้แล้ว:

catch(Exception e)
{
    string str = e.Source;         
    //"EPA" - what I want               
    str = System.Reflection.Assembly.GetExecutingAssembly().FullName;
    //"EPA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
    str = typeof(Program).FullName;
    //"EPA.Program"
    str = typeof(Program).Assembly.FullName;
    //"EPA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
    str = typeof(Program).Assembly.ToString();
    //"EPA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
    str = typeof(Program).AssemblyQualifiedName;
    //"EPA.Program, EPA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
}

คำตอบ:


350
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name

หรือ

typeof(Program).Assembly.GetName().Name;

VS แสดงข้อผิดพลาดในการแก้ปัญหาการใช้งาน คุณสามารถใช้ Assembly.GetEntryAssembly (). GetName (). ชื่อ;
Butsaty

3
ที่จริงควรเป็น typeof (any) .GetTypeInfo (). Assembly
Thaina

7

ฉันใช้แอสเซมบลีเพื่อตั้งชื่อของแบบฟอร์มเช่น:

private String BuildFormTitle()
{
    String AppName = System.Reflection.Assembly.GetEntryAssembly().GetName().Name;
    String FormTitle = String.Format("{0} {1} ({2})", 
                                     AppName, 
                                     Application.ProductName, 
                                     Application.ProductVersion);
    return FormTitle;
}

1
แค่ดีใจที่คุณไม่ได้โทรหาจากภายใน Office Addin - ที่ GetEntryAssembly () จะส่งคืน null
PandaWood

3

คุณสามารถลองใช้รหัสนี้ซึ่งใช้System.Reflection.AssemblyTitleAttribute.Titleคุณสมบัติ:

((AssemblyTitleAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(AssemblyTitleAttribute), false)).Title;


2

คุณสามารถใช้AssemblyNameคลาสเพื่อรับชื่อชุดประกอบหากคุณมีชื่อเต็มสำหรับชุดประกอบ:

AssemblyName.GetAssemblyName(Assembly.GetExecutingAssembly().FullName).Name

หรือ

AssemblyName.GetAssemblyName(e.Source).Name

การอ้างอิง MSDN - คลาส AssemblyName


2
ฉันได้รับข้อผิดพลาดเนื่องจากพารามิเตอร์ของเมธอด GetAssemblyName ฉันคิดว่ามันควรจะได้รับแทนAssembly.GetExecutingAssembly().Location Assembly.GetExecutingAssembly().FullName
uzay95

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.