2016-07-26 70 views
0

我已经创建了PostSharp方面抛出编译错误,当键入app.config文件不存在,但ConfigurationManager.AppSettings.HasKeys()返回“假”时,我检查它在CompileTimeValidate方法。可以帮我?谢谢!发布的应用程序 - 应用程序设置配置检查

[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。

为了确认,我在测试类中使用了您的属性,并收到错误消息“Test not exist!”。

然后我说这 C:\ ProgramData \ PostSharp \ 4.2.29 \ bin.Release \ postsharp-net40 86 srv.exe.config

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

...重新建造错误消失了。这就是它正在阅读的.config文件。