- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 CodeDom 生成 WCF 服务接口(interface)和实现文件。我在 CodeMemberMethod 上找不到任何允许我生成接口(interface)方法的选项。如果我使用 MemberAttributes.Abstract 我几乎就在那里,但它包含对接口(interface)无效的抽象关键字。有谁知道生成该方法的正确语法吗?
这是我开发的用于生成接口(interface)文件的代码:
private void CreateServiceContractFile(Type entity, BoElement bo, DirectoryInfo serviceOutputDir, AppParameters appPrams)
{
CodeCompileUnit serviceFileUnit = new CodeCompileUnit();
CodeNamespace importNameSpace = new CodeNamespace("");
importNameSpace.Imports.Add(new CodeNamespaceImport("System"));
importNameSpace.Imports.Add(new CodeNamespaceImport("System.Collections.Generic"));
importNameSpace.Imports.Add(new CodeNamespaceImport("System.Linq"));
importNameSpace.Imports.Add(new CodeNamespaceImport("System.Runtime.Serialization"));
importNameSpace.Imports.Add(new CodeNamespaceImport("System.ServiceModel"));
importNameSpace.Imports.Add(new CodeNamespaceImport("System.ServiceModel.Web"));
importNameSpace.Imports.Add(new CodeNamespaceImport("System.Text"));
importNameSpace.Imports.Add(new CodeNamespaceImport("ALVIN.BusinessObjects"));
importNameSpace.Imports.Add(new CodeNamespaceImport("DAOObjects = ALVIN.DAO"));
importNameSpace.Imports.Add(new CodeNamespaceImport("ALIAS.BusinessObjects"));
importNameSpace.Imports.Add(new CodeNamespaceImport("System.Data.Entity.Validation"));
importNameSpace.Imports.Add(new CodeNamespaceImport("System.ComponentModel.DataAnnotations"));
importNameSpace.Imports.Add(new CodeNamespaceImport("System.Data.Objects"));
importNameSpace.Imports.Add(new CodeNamespaceImport("ALIAS.Common.Utility"));
importNameSpace.Imports.Add(new CodeNamespaceImport("ALIAS.EventMessages"));
importNameSpace.Imports.Add(new CodeNamespaceImport("ALIAS.ServiceCommon"));
importNameSpace.Imports.Add(new CodeNamespaceImport(appPrams.BoNameSpace));
serviceFileUnit.Namespaces.Add(importNameSpace);
string serviceName = string.Format("{0}Service", entity.Name);
CodeTypeDeclaration serviceClass = new CodeTypeDeclaration(serviceName);
serviceClass.IsClass = true;
serviceClass.BaseTypes.Add(new CodeTypeReference("I" + serviceName));
serviceClass.TypeAttributes = TypeAttributes.Public;
serviceClass.Comments.AddRange(Helper.CreateComment("The Service Contract class"));
CodeParameterDeclarationExpression headerParm = new CodeParameterDeclarationExpression(
typeof(ALIASTransactionHeader), "header");
CodeParameterDeclarationExpression requestParm = new CodeParameterDeclarationExpression(
bo.BoName, "requestBO");
CodeMemberMethod enterMethod = new CodeMemberMethod();
MethodCommentInfo methodComments = new MethodCommentInfo();
methodComments.CommentSummaryLines.Add(string.Format("Enters a {0} into the system.", bo.BoName));
methodComments.CommentParameters.Add(new ParameterInfo("header", "Security and Logging information for the web method"));
methodComments.CommentParameters.Add(new ParameterInfo("requestBO", string.Format("{0} to be entered into the system", bo.BoName)));
enterMethod.Comments.AddRange(Helper.CreateMethodComment(methodComments));
enterMethod.Parameters.Add(headerParm);
enterMethod.Parameters.Add(requestParm);
enterMethod.PrivateImplementationType = new CodeTypeReference("I" + serviceName);
//enterMethod.Attributes = MemberAttributes.Public | MemberAttributes.Abstract;
enterMethod.Name = string.Format("Enter{0}", bo.BoName);
serviceClass.Members.Add(enterMethod);
CodeNamespace serviceNameSpace = new CodeNamespace(bo.ServiceNameSpace);
serviceNameSpace.Types.Add(serviceClass);
serviceFileUnit.Namespaces.Add(serviceNameSpace);
Helper.CreateFile(serviceFileUnit, new FileInfo(serviceOutputDir + @"\" + serviceName + @".svc.cs"));
}
最佳答案
据我所知,您不必为接口(interface)方法指定任何特殊属性。以下示例
var compUnit = new CodeCompileUnit();
var ns = new CodeNamespace("TestNamespace");
var iface = new CodeTypeDeclaration("ITest");
iface.IsInterface = true;
var mth = new CodeMemberMethod();
mth.Name = "DoSomething";
mth.ReturnType = new CodeTypeReference(typeof(string));
mth.Parameters.Add(new CodeParameterDeclarationExpression(typeof(int), "x"));
iface.Members.Add(mth);
ns.Types.Add(iface);
compUnit.Namespaces.Add(ns);
var csProv = new CSharpCodeProvider();
using (var tw = File.CreateText(@"test.cs"))
{
var options = new CodeGeneratorOptions();
csProv.GenerateCodeFromCompileUnit(compUnit, tw, options);
tw.Flush();
}
生成以下有效输出:
namespace TestNamespace {
public interface ITest {
string DoSomething(int x);
}
}
关于c# - 如何使用 CodeDom 创建接口(interface)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22698937/
我使用 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
我是一名优秀的程序员,十分优秀!