2016-07-26 2 views
0

Я создал аспект PostSharp, чтобы выбросить ошибку компиляции, когда ключ в файле app.config не существует, но ConfigurationManager.AppSettings.HasKeys() возвращает «false», когда я проверяю его в методе CompileTimeValidate. Может мне помочь? Благодаря!Postsharp - проверка конфигурации настроек приложения

[Serializable] 
public class ConfigurationValueRequiredAttribute : MethodInterceptionAspect 
{ 
    // Method invoked at build time. It validates that the aspect has been applied to an acceptable method. 
    public override bool CompileTimeValidate(MethodBase method) 
    { 
     bool valid = true; 

     if (string.IsNullOrEmpty(ConfigurationManager.AppSettings["Test"])) 
     { 

      Message.Write(SeverityType.Error, "CUSTOM02", "Test not exists!"); 
      valid = false; 
     } 

     return valid; 
    } 
} 
+0

Что произойдет, если вы проверите какие-либо ключи? Я не думаю, что app.config будет загружаться во время компиляции. Вы можете попробовать загрузить app.config вручную или загрузить файл app.config в формате XML и выполнить некоторую проверку xpath для проверки наличия ключей. – Michael

ответ

1

Проверка времени компиляции PostSharp - это отдельный процесс. Он не работает в контексте вашего приложения и не загружает и не читает ваш app.config.

Чтобы подтвердить, я использовал ваш атрибут в тестовом классе и получил сообщение об ошибке «Тест не существует!».

Затем я добавил это C: \ ProgramData \ PostSharp \ 4.2.29 \ bin.Release \ PostSharp-net40-x86-srv.exe.config

<appSettings> 
    <add key="test" value="123"/> 
</appSettings> 

... построится, и ошибка исчезла. Это файл .config, который он читает.

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