Любая конфигурация, которая могла бы отличаться через среды, должна сохраненный в уровень машины, не прикладной уровень . (Больше информации на уровнях конфигурации.)
Это виды элементов конфигурации, которые я обычно храню на уровне машины:
, Когда каждая среда (разработчик, интеграция, тест, этап, живой), имеет свои собственные уникальные настройки в каталог c:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG, тогда, можно продвинуть Ваш код приложения между средами без любых модификаций постсборки.
И очевидно, содержание каталога CONFIG машины уровня управляется версией в различном репозитории или различной структуре папок из Вашего приложения. Можно сделать .config файлы большим количеством управления исходным кодом дружественный посредством интеллектуального использования configSource.
я делал это в течение 7 лет на более чем 200 ASP.NET приложениях в 25 + различные компании. (Не пытающийся похвастать, просто хотите сообщить, что я никогда не видел ситуации, где этот подход не делает работа.)
Вы можете обойти эту проблему, создав анонимный тип внутри вашего метода и воспользовавшись преимуществами инициализаторов проекции. Затем вы можете опросить свойства анонимного типа с помощью отражения. Например:
static void ManyParms(
string a, string b, string c, int d, short e, bool f, string g)
{
var hack = new { a, b, c, d, e, f, g };
foreach (PropertyInfo pi in hack.GetType().GetProperties())
{
Console.WriteLine("{0}: {1}", pi.Name, pi.GetValue(hack, null));
}
}
Вы не можете, по сути, - по крайней мере, без подключения к API отладчика / профилирования .
Теоретически там могло быть что-то способ отображения значений параметров в классе StackFrame
, но это не так - и я подозреваю, что для этого вам придется удалить несколько оптимизаций.
Вы не можете использовать отражение, и вы не должны этого делать в любом случае.
Если вам нужна такая функциональность, используйте прокси, например, через реализацию RealProxy, которая перехватывает вызов для тебя. Затем вы можете проверить и изменить любой параметр до того, как будет сделан фактический вызов (или даже не выполнять исходный вызов, это зависит от вас).
Вы не можете этого сделать. Отражение работает с метаданными, внедренными во время компиляции, и в то время значения параметров неизвестны.
Рассматривали ли вы возможность использования АОП, например PostSharp ?
Он может получить доступ к значениям аргументов до выполнения вашего метода, и ваш код, таким образом, будет сокращен до многоразового использования класс атрибута и атрибут, применяемый к методам, для которых требуется эта проверка.
Вы не можете получить значение параметров метода с помощью отражения. Потому что отражение возвращает информацию о метаданных. Если вы хотите получить значение определенного поля или свойства, вам также необходимо использовать экземпляр (как вы уже знаете).
Есть несколько способов получить значение параметра, используя внутренние каналы .NET framework, а именно API профилировщика и API отладчика.
Вы можете использовать АОП для того, что пытаетесь сделать, есть проект Codeplex под названием CThru , который может вам помочь - с помощью CThru вы можете перехватить метод, когда он вызывается, и получить параметры, которые он был вызван с.