Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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# ASP.Net网站中的思考_C#_Asp.net_Reflection - Fatal编程技术网

C# ASP.Net网站中的思考

C# ASP.Net网站中的思考,c#,asp.net,reflection,C#,Asp.net,Reflection,我在一个VisualStudio插件项目中工作了一段时间。本插件的目的是告诉我在我的许多项目中使用了哪些存储过程 为此,我将所有项目(包括业务和DataAccess项目)加载到一个解决方案中,然后使用EnvDTE遍历解决方案的项目以获得特定的代码项 这样我就可以识别调用各种存储过程的方法,而且效果非常好 然后,为了确定哪些方法正在调用DataAccess项目中的各种方法,我使用反射为每个项目加载程序集: foreach (EnvDTE.Project proj in this._solution

我在一个VisualStudio插件项目中工作了一段时间。本插件的目的是告诉我在我的许多项目中使用了哪些存储过程

为此,我将所有项目(包括业务和DataAccess项目)加载到一个解决方案中,然后使用EnvDTE遍历解决方案的项目以获得特定的代码项

这样我就可以识别调用各种存储过程的方法,而且效果非常好

然后,为了确定哪些方法正在调用DataAccess项目中的各种方法,我使用反射为每个项目加载程序集:

foreach (EnvDTE.Project proj in this._solution.Projects) {
    assembly = System.Reflection.Assembly.LoadFrom(GetAssemblyPath(proj));
}

private string GetAssemblyPath(EnvDTE.Project vsProject)
{
    string assemblyPath = "";
    string fullPath = vsProject.Properties.Item("FullPath").Value.ToString();
    string outputPath = vsProject.ConfigurationManager.ActiveConfiguration.Properties.Item("OutputPath").Value.ToString();
    string outputDir = System.IO.Path.Combine(fullPath, outputPath);
    string outputFileName = vsProject.Properties.Item("OutputFileName").Value.ToString();
    assemblyPath = System.IO.Path.Combine(outputDir, outputFileName);

    return assemblyPath;
}
这个系统对大多数项目来说都很好,但现在我遇到了一个问题,我无法摆脱它

是否可以将这种反射程序集加载用于网站项目。它在以下情况下失败:

vsProject.ConfigurationManager.ActiveConfiguration.Properties.Item("OutputPath")
由于该网站的输出路径与WinForms项目的输出路径不同

我需要使用反射,因为不可能单独使用EvnDTE识别对重载方法的调用。通过反射,我可以获得方法体的指令,从而确定调用哪个重载方法

EnvDTE在网站项目中运行良好,但遗憾的是,reflection却不行:(

通过使用EnvDTE,我只能获得方法的文本内容


有人知道该怎么做才能让它工作吗?

它失败了,因为网站项目没有创建可访问且包含所有信息的输出程序集dll。这是由Web服务器动态创建的

我无法绕开它,我的解决方案是简单地将我的网站项目转换为WebApplication项目

这些是实际的普通项目,有一个我可以访问的预编译程序集dll


感谢您的评论…

您能将所有.DLL和.EXE文件加载到输出目录中吗?这会更好。但由于网站项目没有输出路径,并且网站项目不会直接生成为DLL或EXE。放在网站AppCode文件夹中的唯一程序集是引用的DLL'sis它失败是因为您尝试使用变量outputpath,即使它没有值,还是在尝试分配值时引发异常?