2009-04-22 3 views
22

Я искал вокруг, но я не нашел решения для этой проблемы: я хочу создать библиотеку классов, в которой есть файл конфигурации под подкаталогом Configuration. Я хочу, чтобы библиотека классов была развернута где угодно, и я хочу, чтобы она находила файлы конфигурации, зная ее собственное местоположение.Как получить текущий каталог в библиотеке классов?

Предыдущие попытки с Assembly.GetExecutingAssembly().Location не помогли.
Было бы вернуть местоположения TEMP, такие как

C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\7c00e0a3\38789d63\assembly\dl3\9c0a23ff\18fb5feb_6ac3c901

вместо желанной

bin/Configuration пути.

Итак:

  1. Может ли библиотека классов знать о своем собственном местоположении на диске?
  2. Как бы я идти о сценарии тестирования Вайтинга для этой функции, так как это, кажется, что изменение каталогов на основе того, как вы запустите приложение (отладки внутри VS, развертывания на IIS, и т.д.)
+0

Почему бы не включить конфигурацию в файл app.config приложения и использовать ConfigurationManager в библиотеках классов? –

+0

Возможно, вы захотите уточнить свой вопрос (для лучшей поисковой возможности позже), что это ASP.NET. Для настольных приложений GetExecutingAssembly() работает отлично. – Stu

+1

@Justin: Я хочу, чтобы библиотека классов была независимой от приложения-вызывающего. @Stu: Оба. Я хочу создать библиотеку классов, которая может использоваться как для консольных приложений, так и для веб-приложений. Библиотека классов не должна заботиться о том, кто ее называет. – nandos

ответ

33

Это должно работать -

string assemblyFile = (
    new System.Uri(Assembly.GetExecutingAssembly().CodeBase) 
).AbsolutePath; 
+0

будет: System.Reflection.Assembly.GetExecutingAssembly() .Location не дает такую ​​же информацию ...? – dba

+1

@dba нет, когда есть теневое копирование. попробуйте в модульном тесте, например, и это будет неправильно –