2013-11-26 2 views
0

Я пытаюсь получить имя проекта с помощью кода (TestGetAssemblyName) (собрание?):Как получить имя проекта с помощью кода в ASP.NET C#

enter image description here

Я пытался System.Reflection.Assembly.GetExecutingAssembly().GetName().Name но это возвращает некоторые странные беспорядки символов, выглядит динамически сгенерированным. Есть ли способ получить TestGetAssemblyName, возвращенный мне по коду?

ответ

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 property from Assembly), чтобы получить скомпилированное имя сборки (опять же это может отличаться от названия сборки и названия проекта).

EDIT
Чтобы сделать это одну строку вы должны положить его где-то в вашем коде (конечно же!):

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 %> /> 
0

Я вижу, что ваш проект - это веб-сайт.

Проблема в том, что веб-сайты генерируют dll для каждой отдельной папки, которая у вас есть. Это различные App_Web_asdkfjh.dll.

Если вы публикуете веб-сайт, VS объединит все эти DLL в один. Вы можете назвать это, как хотите, даже включая название вашего проекта, в свойствах проекта развертывания.

Не имея проекта развертывания, вы застряли со случайными именами файлов.

Смежные вопросы