我有以下代码,它使用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等。
先谢谢。
答案 0 :(得分:1)
不,编译时必须存在常量值。这意味着配置文件值永远不能成为代码中常量的有效候选者。
您可以与DEV
,STE
和UAT
符号一起执行此类操作(丑陋,是的,但可行):
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 { }