我使用Visual Studio Addin项目已经有一段时间了。这个插件的目的是告诉我在我的许多项目中使用了哪些存储过程。
我通过将所有项目(包括The Business和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")
由于网站没有与dll日志相同的输出路径,WinForms项目有…
我需要使用反射,因为不可能单独使用EvnDTE识别对重载方法的调用。通过反射,我可以获得方法体的指令,从而确定正在调用哪个重载方法。
EnvDTE在网站项目中工作得很好,但不幸的是反射没有。(
通过使用EnvDTE,我只能获得方法的文本内容。
有谁知道该怎么做才能让它工作吗?
失败是因为网站项目没有创建可访问且包含所有信息的输出程序集dll。这是由web服务器动态创建的。
我无法绕过它,我的解决方案是简单地将我的网站项目转换为WebApplication项目。
这些都是实际的正常项目,并且有一个我可以访问的预编译的汇编dll。