Как сделать так, чтобы версия AssemblyInfo программы C# .NET CF распространялась в окно свойств проводника?
Похоже, что если вы компилируете решение Visual Studio и в файле AssemblyInfo.cs есть номер версии, который должен распространяться, скажем, в диалоговом окне свойств проводника Windows. Таким образом, кто-то может просто щелкнуть правой кнопкой мыши на *.exe и нажать "Свойства", чтобы увидеть версию #. Есть ли в Visual Studio специальная настройка для этого?
Изменить: я должен был упомянуть, что это, в частности, для.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")]
Я не уверен, что 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 обозревателя