Как я могу сделать так, чтобы версия AssemblyInfo программы C# .NET CF распространялась в окне Свойств Проводника?

#c# #.net #compact-framework #versioning

Вопрос:

Похоже, что если вы скомпилируете решение Visual Studio и в вашем файле AssemblyInfo.cs есть версия#, которая должна распространяться, скажем, в диалоговом окне свойств проводника Windows. Таким образом, кто-то может просто щелкнуть правой кнопкой мыши на *.exe и нажать «свойства», чтобы увидеть версию #. Есть ли специальная настройка в Visual Studio, чтобы это произошло?

пример изображения http://content.screencast.com/users/Pincas/folders/Jing/media/40442efd-6d74-4d8a-8e77-c1e725e6c150/2008-09-24_0849.png

Редактировать: Я должен был упомянуть, что это, в частности, для .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» —> используется в версии продукта проводника

Файловая версия сборки=»ГГГГ.ММ.ДД.ХХХ» —> используется в файловой версии проводника