属性参数必须是常量值 - XmlRoot命名空间

时间:2010-11-17 14:22:45

标签: c# .net attributes

我有以下代码,它使用struct来声明一个const值,用作XmlRoot属性的namespacce,因为我们都知道我们只能拥有属性的const值。

public struct Declarations
{
    public const string SchemaVersion = "http://localhost:4304/XMLSchemas/Request.xsd";
}
[XmlRoot(ElementName = "Header", Namespace = Declarations.SchemaVersion, IsNullable = false), Serializable]
public class RequestHeader
{
    ...

这显然会引发错误'属性参数必须是常量值。我的问题是,有什么方法可以使用web.config中指定的值,这样命名空间可以与我拥有的所有不同环境不同 - DEV,STE,UAT等。

先谢谢。

1 个答案:

答案 0 :(得分:1)

不,编译时必须存在常量值。这意味着配置文件值永远不能成为代码中常量的有效候选者。

您可以与DEVSTEUAT符号一起执行此类操作(丑陋,是的,但可行):

public struct Declarations
{
    public const string SchemaVersion_DEV
        = "http://localhost:4304/XMLSchemas/Request.xsd";
    public const string SchemaVersion_STE
        = "http://someotherserver/XMLSchemas/Request.xsd";
    public const string SchemaVersion_UAT
        = "http://anotherserver/XMLSchemas/Request.xsd";
}

#if DEV
[XmlRoot(ElementName = "Header", Namespace = Declarations.SchemaVersion_DEV, IsNullable = false), Serializable]
#elif STE
[XmlRoot(ElementName = "Header", Namespace = Declarations.SchemaVersion_STE, IsNullable = false), Serializable]
#elif UAT
[XmlRoot(ElementName = "Header", Namespace = Declarations.SchemaVersion_UAT, IsNullable = false), Serializable]
#endif
public class RequestHeader { }