2013-12-12 3 views
8

Я хотел бы получить имя сборки ввода, например myApp.exe. Раньше в net45 я использовал Assembly.GetEntryAssembly, но это недоступно в профиле 158. Есть ли альтернативы? (Могу ли я объединить Assembly.GetCallingAssembly на всем пути назад?) Любые советы, которые были высоко оценены.GetEntryAssembly из библиотеки портативных классов (профиль 158)

Используя GetEntryAssembly, я могу определить имя приложения. Я использую это имя для UserAgent в вызовах HttpClient, а также для именования файлов и пометки обратной связи с исходным приложением. Можно было бы оценить альтернативные методы получения имени приложения.

+0

тег PCL автоматически переводится на язык управления принтером. –

+3

Спасибо, извините, все вы, специалисты по управлению принтером, надеясь получить еще несколько баллов. – tofutim

+0

Он недоступен в приложениях Store и Phone. Нет, нет альтернативы, особенно если вы не объясните, зачем вам это нужно. –

ответ

1

Чтобы получить имя приложения

Вы будете иметь дело с тем, что жесткий Assembly.GetEntryAssembly() не доступен в магазине и телефон приложений. Таким образом, вы также не можете получить доступ к своей библиотеке в таком приложении. Обходные пути могут быть трудными для отсутствия поддержки .NET Framework, но это очень просто. Независимо от того, какое приложение использует вашу библиотеку, у вас никогда не будет проблем с предоставлением вам этой информации. Либо потому, что у него нет ограничений на использование GetEntryAssembly() или, конечно, потому что знает, каково его логическое имя.

Так что просто выставляйте объект, чтобы клиент-программист рассказал вам об этом. Просто предоставьте сообщение об исключительном исключении Goodly Good, поэтому он сразу узнает, когда он забудет. Что-то вроде:

public static string ApplicationName { 
     get { 
      if (_applicationName == null) { 
       throw new InvalidOperationException("You *must* assign the ApplicationName property before this library is usable"); 
      } 
      return _applicationName; 
     } 
     set { _applicationName = value; } 
    } 
    private static string _applicationName; 

Обязательно используйте свойство в своем собственном коде вместо частного поля, чтобы исключение было надежно поднято.

Так теперь App Store программист будет просто жестко закодировать присвоение собственности в его App конструктору:

public App() 
    { 
     this.InitializeComponent(); 
     this.Suspending += OnSuspending; 
     YourPclLibrary.ApplicationName = "MyBeautifulSoup"; 
     // etc... 
    } 

позволяет клиенту программисту передать имя приложения через конструктор класса, конечно, также вполне законно (и предпочтительный) подход.

+0

Ханс, конечно, это решение работоспособно, хотя я надеялся, что смогу вытащить имя приложения из справочной библиотеки. Причина в том, что я могу отправить библиотеку другим, кто может использовать ее в приложениях, которые я не пишу. Я всегда хочу знать имя приложения. – tofutim

+0

Хмм - это может сделать трюк в WP и WS http://stackoverflow.com/questions/3411377/get-the-windows-phone-7-application-title-from-code – tofutim

Смежные вопросы