Атрибут AssemblyFileVersion игнорируется

У меня проблема с получением отличия AssemblyVersion от атрибутов AssemblyFileVersion в библиотеке классов, над которой я работаю.

Итак, я попытался создать пустую (кроме Class1.cs) библиотеку классов, чтобы увидеть, является ли это где-то параметром, но я получаю то же самое поведение.

Кажется, атрибут AssemblyVersion просто игнорируется.

Вот соответствующий бит из моего файла AssemblyInfo.cs...

[assembly: AssemblyVersion("0.1")]
[assembly: AssemblyFileVersion("1.1.0.9")]

и вот как все выглядит в Windows Explorer ...

Захват экрана Windows Explorer

Есть ли где-то настройка, которая контролирует это?

РЕДАКТИРОВАТЬ: я нашел один файл, где есть разница, так что это не Windows Explorer, показывающий одно и то же значение для двух разных полей, это связано с тем, как DLL генерируется из компилятора / компоновщика...

3 ответа

Решение

Ключевая проблема здесь в том, что Windows ничего не знает об атрибутах в управляемой программе. Он читает ресурс неуправляемой версии файла. Тот, который встроен в сборку C# с параметром компиляции /win32res. Компилятор автоматически генерирует его по умолчанию, если вы не используете эту опцию, используя значения атрибута сборки, указанные вами в AssemblyInfo.cs, для создания ресурса.

Но ресурс неуправляемой версии файла не имеет стандартного поля для указания чего-либо вроде [AssemblyVersion]. Только [AssemblyFileVersion]. Компилятор на самом деле его испускает, ресурс версии расширяемый. Но Windows XP была последней версией, которая все еще отображает эти настраиваемые поля. Вы можете увидеть этот неуправляемый ресурс, открыв сборку в Visual Studio с помощью File + Open + File.

Да, хромает и раздражает. Группа Windows в MS не любит обслуживать управляемый код.

Правильно, нашел ответ:-)

Вам нужно отредактировать AssemblyInfo.cs и добавить следующее внизу

[assembly: AssemblyInformationalVersion("4.4.4.4")]

Это значение отображается в "версии продукта" в проводнике. AssemblyInformationalVersion является необязательной. Если не указано, используется AssemblyVersion.

Больше информации по этой теме здесь

Проверка на моем компьютере, на самом деле все работает нормально.

Проводник:

Свойства:

Другие, которые отличаются:

Моя версия windows explorer.exe 6.1.7601.17567, если это помогает. Windows 7 SP1

Тестирую это сам на Visual Studio с

[assembly: AssemblyVersion("2.2.2.2")]
[assembly: AssemblyFileVersion("3.3.3.3")]

Дал результат:Похоже, Visual Studio делает что-то не так здесь.

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