0

我正在尝试通过代码(TestGetAssemblyName)获取项目名称:

在此处输入图像描述

我试过System.Reflection.Assembly.GetExecutingAssembly().GetName().Name了,但这会返回一些奇怪的字符,看起来是动态生成的。有没有办法TestGetAssemblyName通过代码返回给我?

4

2 回答 2

1

您在解决方案资源管理器中阅读的内容与编译的程序集名称或程序集标题完全无关。此外,它不会写在您编译的程序集中的任何地方,因此您无法从代码中访问该名称。

假设MyType是在您的程序集中定义的类型,您可以使用AssemblyTitleAttribute属性(通常在 中定义AssemblyInfo.cs)来读取给定的标题(与已编译的程序集名称或代码命名空间无关):

var assembly = typeof(MyType).Assembly;
var attribute = assembly
    .GetCustomAttributes(typeof(AssemblyTitleAttribute), true)
    .OfType<AssemblyTitleAttribute>()
    .FirstOrDefault();

var title = attribute != null ? attribute.Title : "";

这 ( AssemblyTitleAttribute) 只是 中定义的属性之一AssemblyInfo.cs,请选择最符合您要求的属性。

另一方面,您可以使用程序集名称(Name属性 from Assembly)来获取编译的程序集名称(同样,这可能与程序集标题和项目标题不同)。

编辑
要使其成为单行,您必须将其(当然!)放在代码中的某个位置:

public static class App
{
    public static string Name
    {
         get
         {
             if (_name == null)
             {
                 var assembly = typeof(App).Assembly;
                 var attribute = assembly
                     .GetCustomAttributes(typeof(AssemblyTitleAttribute), true)
                     .OfType<AssemblyTitleAttribute>()
                     .FirstOrDefault();

                _name = attribute != null ? attribute.Title : "";
             }

             return _name;
         }
    }

    private string _name;
}

用作:

<a href="server/App?appName=<% App.Name %> /> 
于 2013-11-26T17:14:35.747 回答
0

我看到你的项目是一个网站。

问题是网站会为您在其中的每个文件夹生成一个 dll。那就是各种App_Web_asdkfjh.dll。

如果您发布网站,VS 会将所有这些 DLL 合并为一个。您可以在部署项目的属性中随意命名,甚至包括项目名称。

如果没有部署项目,您就会被随机的文件名所困扰。

于 2013-11-26T17:17:35.457 回答