Как я могу получить установку 'AssemblyCompany' (в AssemblyInfo.cs)? [дубликат]

Для Kotlin вы можете использовать context непосредственно в фрагментах. Но в некоторых случаях вы найдете ошибку, например

Тип несоответствия: inferred type is Context? но ожидался контекст

, для которого вы можете это сделать

val ctx = context ?: return
textViewABC.setTextColor(ContextCompat.getColor(ctx, android.R.color.black))
26
задан Jonathan 27 June 2010 в 12:07
поделиться

2 ответа

Это должно сработать:

using System.Reflection;

string company = ((AssemblyCompanyAttribute)Attribute.GetCustomAttribute(
    Assembly.GetExecutingAssembly(), typeof(AssemblyCompanyAttribute), false))
   .Company;

Если вы действительно хотите сохранить значение в одном месте и у вас несколько сборок в вашем решении, вы можете либо:

  • Использовать GetEntryAssembly вместо GetExecutingAssembly и установить атрибут company только на вашей входной сборке, или лучше:
  • Использовать центральный информационный файл сборки, см. этот ответ

UPDATE Улучшил код по предложению @hmemcpy, так что [0] больше не нужен. Спасибо!

46
ответ дан 28 November 2019 в 06:05
поделиться

Если вам нужен хороший универсальный метод для извлечения данных о сборке, попробуйте следующее:

public string GetAssemblyAttribute<T>(Func<T, string> value)
    where T : Attribute
{
    T attribute = (T)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof (T));
    return value.Invoke(attribute);
}

, так что вы можете затем вызвать

string title = GetAssemblyAttribute<AssemblyTitleAttribute>(a => a.Title);
string copyright = GetAssemblyAttribute<AssemblyCopyrightAttribute>(a => a.Copyright);
string version = GetAssemblyAttribute<AssemblyVersionAttribute>(a => a.Version);
string description = GetAssemblyAttribute<AssemblyDescriptionAttribute>(a => a.Description);
34
ответ дан Adam Price 28 November 2019 в 06:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: