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

Похоже, что если вы компилируете решение 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, который не поддерживает AssemblyFileVersion. Вся надежда потеряна?

7 ответов

Обратите внимание, что атрибут AssemblyFileVersion недоступен в.NET Compact Framework!

Смотрите эту статью от Дэниела Мута для обходного пути.

ПРИМЕЧАНИЕ. Этот ответ предназначен для доступа к свойствам AssemblyInfo в приложении.NET CF 3.5. Он не распространяется на "Свойства" исполняемого файла в проводнике Windows (но может использоваться для записи в файл, на консоль или для отображения в приложении)

Я знаю, что это очень старый вопрос, но вот решение, которое я нашел, используя Reflection и Linq, чтобы получить "AssemblyInformationalVersion" (версия продукта в новых проектах Visual Studio).

Сначала я добавил это в AssemblyInfo.cs (замените строку на то, что вы хотите использовать):

[assembly: AssemblyInformationalVersion("1.0.0.0 Alpha")]

Затем вы можете использовать этот метод для извлечения атрибута (я поместил его в статический класс в файле AssemblyInfo.cs). Метод get представляет собой массив всех атрибутов Assembly, затем выбирает первый результат, соответствующий имени атрибута (и приводит его к правильному типу). Затем можно получить доступ к строке 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();
    }
}

Вам нужно добавить еще один атрибут:

[assembly: AssemblyFileVersion("1.0.114.0")]

Обратите внимание, что вам по-прежнему нужен также AssemblyVerison, чтобы правильно идентифицировать сборку в среде выполнения.NET.

Номер версии распространяется на вкладку "Версия" в диалоговом окне свойств, но не до сводки. К сожалению, VS не будет автоматически заполнять сводную информацию о файле, поскольку эта информация является метаданными, прикрепленными к самому файлу. Однако вы можете получить доступ к сводной информации и манипулировать ею самостоятельно, используя бесплатное средство чтения свойств DSO OleDocument от Microsoft.

Вы можете приобрести библиотеку по адресу: http://www.microsoft.com/downloads/details.aspx?FamilyId=9BA6FAC6-520B-4A0A-878A-53EC8300C4C2&displaylang=en

Дополнительную информацию о его использовании можно найти по адресу: http://www.developerfusion.co.uk/show/5093/

РЕДАКТИРОВАТЬ: Как отмечалось выше, pb и Найджел Хокинс, вы можете получить свойство распространять с помощью атрибута AssemblyFileVersion, как:

[assembly: AssemblyFileVersion("1.0.114.0")]

Помогает ли атрибут AssemblyFileVersion?

Я не уверен, что RevisionNumber является правильным полем для поиска.

Попробуйте проводник, щелкните правой кнопкой мыши -> вкладка версия и посмотрите на поле AssemblyVersion.

В моем проекте мы используем FileVersion = YYYY.MM.DD.BUILD (например, 2008.9.24.1), но ProductVersion должен быть major.minor.revision.BUILD. мы используем AssemblyInformationalVersion, чтобы обойти это.

AssemblyVersion = "MAJ.MIN.REV.1" -> используется.NET

AssemblyInformationalVersion = "MAJ.MIN.REV.XXX" -> используется в обозревателе ProductVersion

AssemblyFileVersion = "YYYY.MM.DD.XXX" -> используется в FileVersion обозревателя

Другие вопросы по тегам