Каковы лучшие практики для использования Атрибутов сборки?

Когда вы объявляете ссылочную переменную (т. е. объект), вы действительно создаете указатель на объект. Рассмотрим следующий код, в котором вы объявляете переменную примитивного типа int:

int x;
x = 10;

В этом примере переменная x является int, и Java инициализирует ее для 0. Когда вы назначаете его 10 во второй строке, ваше значение 10 записывается в ячейку памяти, на которую указывает x.

Но когда вы пытаетесь объявить ссылочный тип, произойдет что-то другое. Возьмите следующий код:

Integer num;
num = new Integer(10);

Первая строка объявляет переменную с именем num, но она не содержит примитивного значения. Вместо этого он содержит указатель (потому что тип Integer является ссылочным типом). Поскольку вы еще не указали, что указать на Java, он устанавливает значение null, что означает «Я ничего не указываю».

Во второй строке ключевое слово new используется для создания экземпляра (или создания ) объекту типа Integer и переменной указателя num присваивается этот объект. Теперь вы можете ссылаться на объект, используя оператор разыменования . (точка).

Exception, о котором вы просили, возникает, когда вы объявляете переменную, но не создавали объект. Если вы попытаетесь разыменовать num. Перед созданием объекта вы получите NullPointerException. В самых тривиальных случаях компилятор поймает проблему и сообщит вам, что «num не может быть инициализирован», но иногда вы пишете код, который непосредственно не создает объект.

Например, вы можете имеют следующий метод:

public void doSomething(SomeObject obj) {
   //do something to obj
}

В этом случае вы не создаете объект obj, скорее предполагая, что он был создан до вызова метода doSomething. К сожалению, этот метод можно вызвать следующим образом:

doSomething(null);

В этом случае obj имеет значение null. Если метод предназначен для того, чтобы что-то сделать для переданного объекта, целесообразно бросить NullPointerException, потому что это ошибка программиста, и программисту понадобится эта информация для целей отладки.

Альтернативно, там могут быть случаи, когда цель метода заключается не только в том, чтобы работать с переданным в объекте, и поэтому нулевой параметр может быть приемлемым. В этом случае вам нужно будет проверить нулевой параметр и вести себя по-другому. Вы также должны объяснить это в документации. Например, doSomething может быть записано как:

/**
  * @param obj An optional foo for ____. May be null, in which case 
  *  the result will be ____.
  */
public void doSomething(SomeObject obj) {
    if(obj != null) {
       //do something
    } else {
       //do something else
    }
}

Наконец, Как определить исключение & amp; причина использования Трассировки стека

162
задан Community 23 May 2017 в 10:31
поделиться

6 ответов

Мы используем глобальный файл по имени GlobalAssemblyInfo.cs и локальный по имени AssemblyInfo.cs. Глобальный файл содержит следующие атрибуты:

 [assembly: AssemblyProduct("Your Product Name")]

 [assembly: AssemblyCompany("Your Company")]
 [assembly: AssemblyCopyright("Copyright © 2008 ...")]
 [assembly: AssemblyTrademark("Your Trademark - if applicable")]

 #if DEBUG
 [assembly: AssemblyConfiguration("Debug")]
 #else
 [assembly: AssemblyConfiguration("Release")]
 #endif

 [assembly: AssemblyVersion("This is set by build process")]
 [assembly: AssemblyFileVersion("This is set by build process")]

локальный AssemblyInfo.cs содержит следующие атрибуты:

 [assembly: AssemblyTitle("Your assembly title")]
 [assembly: AssemblyDescription("Your assembly description")]
 [assembly: AssemblyCulture("The culture - if not neutral")]

 [assembly: ComVisible(true/false)]

 // unique id per assembly
 [assembly: Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]

можно добавить GlobalAssemblyInfo.cs использование следующей процедуры:

  • Выбор Добавляют/Существующими Объект... в контекстном меню проекта
  • GlobalAssemblyInfo.cs
  • Выбора Разворачивают Добавлять-кнопку путем нажатия, что мало стрелки вниз справа
  • Выбор, "Добавляют Как Ссылка" в выпадающем списке
кнопок
205
ответ дан Hakan Fıstık 23 November 2019 в 21:22
поделиться

В моем случае мы создаем продукт, для которого у нас есть решение для Visual Studio с различными компонентами в их собственных проектах. Общие атрибуты идут. В решении существует приблизительно 35 проектов и общая информация о блоке (CommonAssemblyInfo.cs), который имеет следующие атрибуты:

[assembly: AssemblyCompany("Company")]
[assembly: AssemblyProduct("Product Name")]
[assembly: AssemblyCopyright("Copyright © 2007 Company")]
[assembly: AssemblyTrademark("Company")]

//This shows up as Product Version in Windows Explorer
//We make this the same for all files in a particular product version. And increment it globally for all projects.
//We then use this as the Product Version in installers as well (for example built using Wix).
[assembly: AssemblyInformationalVersion("0.9.2.0")]

другие атрибуты, такие как AssemblyTitle, AssemblyVersion и т.д., мы предоставляем на основе на блок. При создании блока и AssemblyInfo.cs и CommonAssemblyInfo.cs встроены в каждый блок. Это дает нам лучший из обоих миров, где можно хотеть иметь некоторые общие атрибуты для всех проектов и определенные значения для некоторых других.

Hope, которая помогает.

19
ответ дан Krishna 23 November 2019 в 21:22
поделиться

Решением, представленным @JRoppert, является почти то же как, что я делаю. Единственная разница - то, что я поместил следующие строки в локальный файл AssemblyInfo.cs, поскольку они могут меняться в зависимости от каждого блока:

#if DEBUG
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif
[assembly: AssemblyVersion("This is set by build process")]
[assembly: AssemblyFileVersion("This is set by build process")]
[assembly: CLSCompliant(true)]

я также (обычно) использую одну общую информацию о блоке на решение, учитывая, что одним решением является единая линейка продуктов / публикуемый продукт. Общий информационный файл блока также имеет:

[assembly: AssemblyInformationalVersion("0.9.2.0")]

, Который установит значение "ProductVersion", отображенное Windows Explorer.

14
ответ дан Scott Dorman 23 November 2019 в 21:22
поделиться

Задачи Сообщества MSBuild содержат пользовательскую задачу под названием AssemblyInfo, который можно использовать для генерации assemblyinfo.cs. Это требует, чтобы немного редактирования руки Ваших csproj файлов использовало, но стоит.

8
ответ дан Simon 23 November 2019 в 21:22
поделиться

Чтобы совместно использовать файл между несколькими проектами, можно добавить существующий файл как ссылку.

, Чтобы сделать это, добавьте существующий файл и нажмите на "Add as Link" в селекторе файла. Add As Link
(источник: free.fr)

Что касается того, что вставить совместно используемый файл, я предложил бы поместить вещи, которые будут совместно использованы через блоки. Вещи как авторское право, компания, возможно, версия.

3
ответ дан Glorfindel 23 November 2019 в 21:22
поделиться

Используя единственный файл AseemblyInfo.cs для нескольких проектов не рекомендуется. Файл AssemblyInfo включает информацию, которая могла бы быть важна только для того определенного блока. Два самых очевидных сведения AssemblyTitle и AssemblyVersion.

А лучшее решение могло бы состоять в том, чтобы использовать targets файл, которые обрабатываются MSBuild для "введения" атрибутов сборки больше чем к одному проекту.

1
ответ дан SaguiItay 23 November 2019 в 21:22
поделиться
Другие вопросы по тегам:

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