1

私はしばらくの間、VisualStudioAddinプロジェクトで作業してきました。このアドインの目的は、多くのプロジェクトでどのストアドプロシージャがどこで使用されているかを教えてくれることです。

これは、ビジネスプロジェクトとDataAccessプロジェクトを含むすべてのプロジェクトを1つのソリューションにロードし、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;
}

このシステムはほとんどのプロジェクトでうまく機能しますが、今は問題が発生し、回避できません...。

この種のリフレクションアセンブリの読み込みをWebSiteプロジェクトに使用することは可能ですか。それは失敗します:

vsProject.ConfigurationManager.ActiveConfiguration.Properties.Item("OutputPath")

Webサイトには、dllogWinFormsプロジェクトと同じように出力パスがないため...

EvnDTEを単独で使用してオーバーロードされたメソッドへの呼び出しを識別することはできないため、リフレクションを使用する必要があります。リフレクションを使用すると、メソッド本体の指示を取得できるため、どのオーバーロードされたメソッドが呼び出されているかを識別できます。

EnvDTEはWebSiteプロジェクトでは正常に機能しますが、残念ながらリフレクションは機能しません。:(

EnvDTEを使用することにより、メソッドのテキストコンテンツのみを取得できます。

誰かがこれを機能させるために何をすべきか知っていますか?

4

1 に答える 1

0

WebSiteプロジェクトは、アクセス可能ですべての情報を含む出力アセンブリdllを作成しないため、失敗していました。代わりに、これはWebサーバーによってオンザフライで作成されます。

私はそれを回避することができず、私の解決策は単に私のWebSiteプロジェクトをWebApplicationプロジェクトに変換することでした。

これらは実際の通常のプロジェクトであり、アクセスできるプリコンパイル済みのアセンブリdllがあります。

コメントしてくれてありがとう...

于 2013-01-10T10:13:49.157 に答える