C# 如何浏览我的解决方案的文件夹?
我在asp.net mvc上的一个解决方案中有7个项目。我将模型类、控制器、cshtml文件、视图模型等分离到其他项目中。在每一个项目中,我都会在其他文件夹中将类等分开。例如,在my Application.Viewmodel项目中,有4个文件夹,每个文件夹都有自己的viewmodels。当然,每个项目都有自己的名称空间。现在,我必须通过反射遍历文件夹,以获取每个文件夹的viewmodel名称。我可以使用下面的代码检索整个viewmodel名称。但重要的是要知道哪个viewmodel保留在哪个文件夹中。我想从每个文件夹中逐个获取viewmodel名称。我该怎么做C# 如何浏览我的解决方案的文件夹?,c#,asp.net-mvc,reflection,C#,Asp.net Mvc,Reflection,我在asp.net mvc上的一个解决方案中有7个项目。我将模型类、控制器、cshtml文件、视图模型等分离到其他项目中。在每一个项目中,我都会在其他文件夹中将类等分开。例如,在my Application.Viewmodel项目中,有4个文件夹,每个文件夹都有自己的viewmodels。当然,每个项目都有自己的名称空间。现在,我必须通过反射遍历文件夹,以获取每个文件夹的viewmodel名称。我可以使用下面的代码检索整个viewmodel名称。但重要的是要知道哪个viewmodel保留在哪个文
string @namespace = "Application.Viewmodel";
List<String> viewModels = new List<string>();
List<Type> returnVal = AppDomain.CurrentDomain
.GetAssemblies()
.SelectMany(t => t.GetTypes())
.Where(t => t.IsClass && t.Namespace == @namespace).ToList();
for (int i = 0; i < returnVal.Count; i++)
{
viewModels.Add(returnVal[i].Name);
}
string@namespace=“Application.Viewmodel”;
列表视图模型=新列表();
List returnVal=AppDomain.CurrentDomain
.getAssemblys()
.SelectMany(t=>t.GetTypes())
.Where(t=>t.IsClass&&t.Namespace==@Namespace).ToList();
for(int i=0;i
编译代码时,不会保留原始文件的物理位置。程序集只是一组类型定义。你可以从PDB文件中得到,但实际上不是同一件事
如果需要组织类,应该使用名称空间来组织。执行类似于MyProject.ViewModels.FolderA
和MyProject.ViewModels.FolderB
的操作
下面是一个非常简单的示例,它假设名称空间的最后一段是唯一的部分:
var typesGroupedByNamespace = AppDomain.CurrentDomain
.GetAssemblies()
.SelectMany(t => t.GetTypes())
.Where(t => t.IsClass && t.Namespace.StartsWith(@namespace))
.GroupBy(t => t.Namespace.Substring(t.Namespace.LastIndexOf(".") + 1));
当我这样做时,我可以为名称空间使用foreach循环吗?我不想硬编码。@tameremili我不知道你在问什么。@tameremili我提供的代码示例将返回一个
I分组
,其中键值是名称空间的最后一段(即“FolderA”)。您可以在iGroup上循环以获取每个组的密钥及其成员。是的,这就是我要问的,谢谢您的帮助!明天我将在我的代码上试用它,如果它有效,我会这样做,别担心:)