Я создал DLL, которая будет собирать информацию из AssemblyInfo.cs. В конструкторе класса я использую Reflection, чтобы получить самое работающее приложение.
public class AppInfo()
{
public AppInfo()
{
System.Reflection.Assembly assembly =
System.Reflection.Assembly.GetEntryAssembly();
if (assembly == null)
assembly = System.Reflection.Assembly.GetCallingAssembly();
//code to gather needed information
}
}
Как это предполагается использовать, если я вызываю это из любой библиотеки DLL в данном приложении, MyApp, которая позволяет сказать, что имя всегда будет «MyApp». Получение этой информации не является проблемой, и она прекрасно работает в Windows Services и Windows Applications. У меня вопрос такой:
Как мне получить сборку самого верхнего сайта?
Я нашел несколько статей и могу получить информацию в Global.asax.cs, переместив AssemblyInfo.cs для веб-сайта из папки App_Code в корень веб-сайта. Затем, добавив параметр compilerOption к физическому пути AssemblyInfo.cs
<compiler
language="c#;cs;csharp"
extension=".cs"
compilerOptions="C:\Sandbox\MyWebSite\AssemblyInfo.cs"
type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
Используя это, я могу получить информацию в AssemblyInfo.cs для Веб-сайта через System.Reflection.Assembly.GetExecutingAssembly()
. Теперь я могу перегрузить конструктор моего AppInfo
класса, чтобы принять Assembly
и получить информацию таким образом, но если другая DLL, используемая MyWebSite
, создаст new AppInfo()
, я получу вместо этого информацию о сборке этой DLL родительского сайта.
Я знаю, что если бы я работал с веб-приложениями, а не с веб-сайтами, у меня не было бы этой проблемы, но по причинам, в которые я не буду вдаваться, я не смогу использовать веб-приложения. Любые предложения о том, как я могу прочитать информацию из AssemblyInfo.cs веб-сайта, на котором я работаю, независимо от того, в какой DLL я нахожусь?
РЕДАКТИРОВАТЬ: Мне это нужно для работы с веб-сайтами, приложениями Windows и службами Windows