Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取t4模板中的类属性(vs2015)_C#_.net_T4_System.type - Fatal编程技术网

C# 获取t4模板中的类属性(vs2015)

C# 获取t4模板中的类属性(vs2015),c#,.net,t4,system.type,C#,.net,T4,System.type,使用VS2015,我正在修改controller&views脚手架的默认t4模板。在这个模板中,我可以直接访问相关模型的属性,但我还需要获取与模板位于同一项目中的类的属性。我在t4模板顶部添加了以下内容: <#@ Assembly Name="C:\_code\MyProject\obj\Debug\MyProject.dll" #> <#@ import namespace="MyProject.Models.Filtros" #> 这工作正常 现在我的问题是,我不需

使用VS2015,我正在修改controller&views脚手架的默认t4模板。在这个模板中,我可以直接访问相关模型的属性,但我还需要获取与模板位于同一项目中的类的属性。我在t4模板顶部添加了以下内容:

<#@ Assembly Name="C:\_code\MyProject\obj\Debug\MyProject.dll" #>
<#@ import namespace="MyProject.Models.Filtros" #>
这工作正常

现在我的问题是,我不需要在代码中编写类的名称(比如这里的filteroclients),而需要用类似

var classname = "Filtro" + ControllerRootName;
当然,这是行不通的:

var listPropsFiltro = typeof(classname).GetProperties().Select(f => f.Name).ToList();
我在stackexchange和其他地方都找到了一些关于类似情况的帖子,但没有一个解决方案适合我。。。 那么正确的方法应该是什么呢?

您可以使用:

Type classType=Assembly.GetType(classname)

然后再打电话

var listPropsFiltro=classType.GetProperties().Select(f=>f.Name.ToList()

您可以尝试使用以下工具获取当前程序集:

Assembly.getExecutionGassembly()

如果执行的程序集不等于包含类的项目程序集,则可以执行类似操作

Assembly项目Assembly=Assembly.LoadFrom(pathtproject)


请参阅。

您是在寻找还是?是的,typeof(classname)应该是System.String。。。没有帮助。如果您已经在加载程序集,为什么不加载您所在的项目,然后从中获取类型?当然,你必须重建它才能得到最新的结果,但不应该太麻烦。我已经尝试过了,但在搭建时显示错误:非静态字段、方法或属性“Assembly.GetType(string)”需要对象引用。这里的问题是,这段代码在t4模板中,而t4模板是(据我所知)始终依靠自己(与任何项目或解决方案无关)。因此getExecutionGassembly()方法返回一个临时程序集。(即,
string s=Assembly.getExecutionGassembly().FullName
返回类似于
TemporaryT4Assembly、Version=0.0.0、Culture=neutral、PublicKeyToken=null的内容,但仍不工作。它在
Type classType=projectassembly.GetType(classname)行失败;
使用
表达式块计算为Null System.ArgumentNullException:在Microsoft.VisualStudio.TextTemplating.ToStringHelper.ToStringWithCulture(Object objectToConvert)中,值不能为Null?
var listPropsFiltro = typeof(classname).GetProperties().Select(f => f.Name).ToList();