#c# #.net #compact-framework #versioning
Вопрос:
Похоже, что если вы скомпилируете решение Visual Studio и в вашем файле AssemblyInfo.cs есть версия#, которая должна распространяться, скажем, в диалоговом окне свойств проводника Windows. Таким образом, кто-то может просто щелкнуть правой кнопкой мыши на *.exe и нажать «свойства», чтобы увидеть версию #. Есть ли специальная настройка в Visual Studio, чтобы это произошло?
Редактировать: Я должен был упомянуть, что это, в частности, для .NET Compact Framework 2.0, которая не поддерживает сборку. Неужели вся надежда потеряна?
Ответ №1:
Обратите внимание, что атрибут AssemblyFileVersion недоступен в .NET Compact Framework!
Смотрите эту статью Дэниела Мута для решения этой проблемы.
Комментарии:
1. Наконец, разработчик CF отвечает на вопрос CF 🙂
Ответ №2:
ПРИМЕЧАНИЕ: Этот ответ предназначен для доступа к свойствам AssemblyInfo в приложении .NET CF 3.5. Он не распространяется на «Свойства» исполняемого файла внутри проводника Windows (но может использоваться для записи в файл, на консоль или для отображения в приложении).
Я знаю, что это очень старый вопрос, но вот решение, которое я нашел с помощью Reflection и Linq для получения «AssemblyInformationalVersion» (версия продукта в более новых проектах Visual Studio).
Во-первых, я добавил это в AssemblyInfo.cs (замените строку на то, что вы хотите использовать).:
[assembly: AssemblyInformationalVersion("1.0.0.0 Alpha")]
Затем вы можете использовать этот метод для извлечения атрибута (я поместил его в статический класс в файле AssemblyInfo.cs). Метод get содержит массив всех атрибутов сборки, затем выбирает первый результат, соответствующий имени атрибута (и приводит его к нужному типу). Затем можно получить доступ к строке InformationalVersion.
//using System.Reflection;
//using System.Linq;
public static string AssemblyInformationalVersion
{
get
{
AssemblyInformationalVersionAttribute informationalVersion = (AssemblyInformationalVersionAttribute)
(AssemblyInformationalVersionAttribute.GetCustomAttributes(Assembly.GetExecutingAssembly())).Where(
at => at.GetType().Name == "AssemblyInformationalVersionAttribute").First();
return informationalVersion.InformationalVersion;
}
}
Чтобы получить обычный атрибут «AssemblyVersion», я использовал:
//using System.Reflection;
public static string AssemblyVersion
{
get
{
return Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
}
Комментарии:
1. Это по-прежнему не будет отображаться в окне свойств проводника, как просит операция.
2. Ах, ты прав. Я не понимал, что операция спрашивала конкретно о встроенных исполняемых свойствах. Потенциально вы могли бы распечатать атрибуты в файле (или отобразить их в приложении), но это не очень хорошее решение. Я добавил отказ от ответственности в начало.
Ответ №3:
Помогает ли атрибут AssemblyFileVersion?
Комментарии:
1. Ну, согласно msdn, в нем говорится, что «Если атрибут AssemblyFileVersionAttribute не указан, атрибут AssemblyVersionAttribute используется для версии файла Win32», поэтому я его не пробовал. Может быть, я попробую позже и посмотрю, сработает ли это.
Ответ №4:
Вам нужно добавить еще один атрибут:
[assembly: AssemblyFileVersion("1.0.114.0")]
Обратите внимание, что вам также по-прежнему нужна сборка, чтобы правильно идентифицировать сборку .СЕТЕВОЕ время выполнения.
Комментарии:
1. Я почти уверен, что attrib не существует в CF, по крайней мере, в 2.00
Ответ №5:
Номер версии распространяется на вкладку «Версия» в диалоге свойств, но не на сводку. К сожалению, VS не будет автоматически заполнять сводную информацию о файле, поскольку информация является метаданными, прикрепленными к самому файлу. Однако вы можете самостоятельно получить доступ к сводной информации и управлять ею с помощью бесплатного средства чтения свойств DSO OleDocument от корпорации Майкрософт.
Вы можете приобрести библиотеку по адресу: http://www.microsoft.com/downloads/details.aspx?Идентификатор семьи=9BA6FAC6-520B-4A0A-878A-53EC8300C4C2 и дисплей=ru
Более подробную информацию о его использовании можно найти по адресу: http://www.developerfusion.co.uk/show/5093/
РЕДАКТИРОВАТЬ: Как отмечалось выше pb и Найджелом Хокинсом, вы можете получить свойство для распространения, используя атрибут AssemblyFileVersion, например:
[assembly: AssemblyFileVersion("1.0.114.0")]
Ответ №6:
Я не уверен, что RevisionNumber-это правильное поле для поиска.
Попробуйте проводник, щелкните правой кнопкой мыши -> вкладка версия и посмотрите на поле AssemblyVersion там.
Ответ №7:
в моем проекте мы используем FileVersion = ГГГГ.ММ.ДД.СБОРКА (например, 2008.9.24.1), но версия продукта должна быть основной.незначительной.ревизией.строить. мы используем AssemblyInformationalVersion, чтобы обойти это.
Версия сборки=»MAJ.MIN.REV.1″ —> используется .NET
AssemblyInformationalVersion=»MAJ.MIN.REV.XXX» —> используется в версии продукта проводника
Файловая версия сборки=»ГГГГ.ММ.ДД.ХХХ» —> используется в файловой версии проводника