1

我一直在使用 Visual Studio Addin 项目一段时间。这个插件的目的是告诉我在我的许多项目中使用了哪些存储过程。

我通过将我的所有项目(包括 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 og WinForms 项目相同的输出路径...

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

EnvDTE 在 WebSite 项目中工作得很好,但不幸的是反射不能。:(

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

有谁知道该怎么做才能让这个工作?

4

1 回答 1

0

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

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

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

感谢您的意见...

于 2013-01-10T10:13:49.157 回答