Это потому, что Assembly.GetEntryAssembly()
возвращает ноль: там нет сборки "entry" на сайте ASP.NET (потому что .NET Framework размещен в процессе w3wp.exe). Assembly.GetEntryAssembly()
используется для получения сборки .exe, с которой вы запустились (обычно в консоли или приложении Windows)
Причина, по которой Assembly.GetAssembly(this.GetType())
возвращает сборку с версией «0.0.0.0», заключается в том, что ASP.NET компилирует файл Site.Master во временную сборку в папке «Временные файлы ASP.NET». this
является ссылкой на «сгенерированный» класс.
Assembly.GetExecutingAssembly()
- это , в основном , то же самое, что и Assembly.GetAssembly(this.GetType())
(за исключением того, что оно также работает, когда нет «this» (например, в статических методах).
Лучшим способом было бы использовать явное использование типа, который, как вы знаете, существует в сборке, за которой вы работаете. В качестве примера я предполагаю, что ваш «Site.Master» имеет файл с выделенным кодом, который компилируется в сборку. Вы можете использовать это вместо:
Assembly.GetAssembly(typeof(Site)).GetName().Version.ToString()
(при условии, что имя класса Site
)