- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 CodeDom 生成一些方法,但在为这些方法生成自定义属性时遇到问题。
我可以管理简单的空属性,比如
[DataMember()]
或带有字符串值参数的属性,
[DataContract(Namespace = "http://somenamespace")]
但是我需要生成更复杂的属性,比如
[WebInvoke(Method = "POST", UriTemplate = "SomeTemplate", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
和
[FaultContract(typeof(Collection<MyFault>))]
对于具有枚举值的参数 ResponseFormat = WebMessageFormat.Json
我已经尝试过与我为字符串所做的类似的方法,创建一个 CodePrimitiveExpression 实例:
CodeAttributeDeclaration webInvoke = new CodeAttributeDeclaration()
{
Name = "WebInvoke",
Arguments =
{
new CodeAttributeArgument
{
Name = "Method",
Value = new CodePrimitiveExpression("POST")
},
new CodeAttributeArgument
{
Name = "UriTemplate",
Value = new CodePrimitiveExpression(method.Name)
},
new CodeAttributeArgument
{
Name = "RequestFormat",
Value = new CodePrimitiveExpression(WebMessageFormat.Json)
},
new CodeAttributeArgument
{
Name = "ResponseFormat",
Value = new CodePrimitiveExpression(WebMessageFormat.Json)
}
}
};
但是,这不起作用,我得到一个异常提示
Invalid Primitive Type: System.ServiceModel.Web.WebMessageFormat. Consider using CodeObjectCreateExpression.
我确实考虑过使用 CodeObjectCreateExpression,但我不知道该怎么做。它需要一个字符串或一个 CodeTypeReference,以及一个 CodeExpression 参数数组作为第二个参数。我不知道该放什么参数。
至于另一个属性,带有typeof(Colleciton<MyFault>)
的属性,我什至不知道从哪里开始。任何帮助将不胜感激。
编辑:有人建议我对我试图模仿的方法调用 CustomAttributeData.GetCustomAttributes,所以我这样做了。为了效率和清晰起见,我将在屏幕截图中提供数据。这让我对我正在处理的事情有了更好的了解,但我仍然不确定如何实现它。
最佳答案
像 WebMessageFormat.Json
这样的表达式看起来像是在访问一个静态字段,所以你必须这样写:
new CodeAttributeArgument
{
Name = "RequestFormat",
Value = new CodeFieldReferenceExpression(
new CodeTypeReferenceExpression("WebMessageFormat"), "Json")
}
typeof
表达式是一种特殊类型的表达式,因此它有自己的 CodeDOM 类型:
new CodeAttributeDeclaration(
"FaultContract",
new CodeAttributeArgument(new CodeTypeOfExpression("Collection<MyFault>")))
要查看 CodeDOM 中可用的所有表达式类型的列表,请查看 the inheritance hierarchy in the docs of CodeExpression
.
关于c# - CodeDom 中方法的复杂属性声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25191077/
我使用 visual studio 发布选项向我的主机发布了我的网站。 我的主机使用 asp.net 4.5.1 框架。 它在本地运行良好,但在我发布之后,却出现了这个错误。 我的本地 visua
这是一个使用VS2015的WebApi项目。 重现步骤: 创建一个空的 WebApi 项目 将构建输出路径从“bin\”更改为“bin\Debug\” 运行 在我将构建输出路径从“bin\”更改为“b
我正在调查 System.CodeDom namespace用于独立于语言(至少在一定范围内)的源代码生成,我发现一些信息不鼓励使用 CodeDom . 我认为 this early blogpost
有人知道如何使用 CodeDom 调用基类的泛型方法吗? 我调用标准方法没有问题,但我找不到调用泛型的解决方案。 我用来调用标准基类方法 GetInstance 的代码: CodeAssignStat
如何使用 CodeDom 生成调用其他类 Constructor 的代码我找不到任何 CodeConstructorInvokeExpression。 最佳答案 我相信您正在寻找CodeObjectC
我有一个在 C# 中使用 WPF 的程序,它使用 .NET 4 Framework(不是客户端配置文件),它编译了一个名为“Source.txt”的源文件。但是,无论何时编译它,我都会收到此错误“错误
我需要向 CodeNamespace 添加一个类 (Type)。我已经编写了一个 C# 类,但我不想将其手动转换为 CodeDOM。有没有办法将现有的加载到 CodeTypeDeclaration。
我正在使用 CodeDom 生成稍后要编译的代码,并且我注意到某些结构会创建额外的括号集。虽然我知道它们不会影响任何东西,但它们看起来确实很奇怪。 执行此操作的代码示例是这样的: new CodeCo
我想为我的应用程序构建一个构建器,这是构建器的来源 using System; using System.Collections.Generic; using System.ComponentMode
我正在尝试使用 CodeDom 生成一些方法,但在为这些方法生成自定义属性时遇到问题。 我可以管理简单的空属性,比如 [DataMember()] 或带有字符串值参数的属性, [DataContrac
有没有办法使用 C# CodeDom 生成字典初始值设定项?这些是否受支持? 我想要: private IDictionary map = new Dictionary { { "Name",
在 visual studio 中,我可以单击“引用”>“添加引用”并从我的计算机浏览到现有的 .dll 文件。然后我可以按如下方式使用引用的 dll: dllNameSpace.dllClassNa
如标题所示,我正在尝试使用 CodeDom 在 C# 的数组中“嵌套”或创建数组。 这是我要复制的行: T.Invoke(null, new object[] { new string[] {} }
我有一个使用 CodeDom 创建的属性。如何将其设置为自动属性,而不是针对私有(private)成员添加 CodeFieldReferenceExpressions? 最佳答案 IIRC,CodeD
有没有办法用 CodeDom 生成类约束。 因为当我使用类似的东西时 var method = new CodeMemberMethod(); var genericParam = new CodeT
好的,我觉得我的问题的答案在网上,但我找不到。我要做的就是将一个文本资源文件添加到我正在使用 CodeDom 编译的程序中,然后在已编译的程序中访问该文本文件。为了添加嵌入式资源,我使用了以下代码:
我正在寻找为使用 codeDOM 生成的 exe 文件设置文件版本的任何方法。我的始终显示为 0.0.0.0。以编程方式显然是首选,但在这一点上,有总比没有好。 最佳答案 编译程序集的版本由 Asse
我从 SE 找到了使用 CodeDOM 的类名验证方法,并使用了它: System.CodeDom.Compiler.CodeGenerator.IsValidLanguageIndependentI
是否可以仅使用常规 .NET 中的 System.CodeDom 创建 Silverlight 应用程序(.xap 文件、testpage.html、ClientBin 旁边的内容资源、浏览器外设置等
在 StackExchange 上有几个与此类似的问题,但它们并未涵盖完全相同的情况。请在将其标记为重复之前通读它! 在 C# 中使用 CodeDom,我试图为字典生成一个初始化表达式。例如 Dict
我是一名优秀的程序员,十分优秀!