2

これは、以前に MSDN フォーラムに投稿された質問で、今日まで未回答のままです。

http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/676b13d4-acfc-4252-b102-5fc0553e4b81/

私が興味を持っているプロパティは、Visual Studio ソリューション (.sln) ファイルに格納されている ProjOutputReferences です。

Visual Studio では、このプロパティは Silverlight WebSite プロジェクトの [プロパティ ページ] ダイアログからアクセスできます (VS2008 用の Silverlight ツールがインストールされている必要があります)。そこには、上記のプロパティの内容を編集できる「Silverlight Applications」というページがあります。

VS 自動化または低レベル インターフェイスを介して、アドイン内でプログラムによってアクセスする必要があります。

4

2 に答える 2

4

Silverlight Tools for VS 2008 SP1 の最新リリース バージョンでは、リストは参照プロジェクト ファイルの SilverlightApplicationList プロパティに保持されます。たとえば、私のソリューションには SilverlightApplication2 と SilverlightApplication2.Web があります (後者は前者を参照しています)。SilverlightApplication2.Web.csproj ファイルに次のノードがあります。

<SilverlightApplicationList>{BBA7B148-42AE-477E-BB5E-0BA5AEC0A467}|..\SilverlightApplication2\SilverlightApplication2.csproj|ClientBin|False</SilverlightApplicationList>

純粋に DTE 経由でこのプロパティにアクセスする方法は実際にはありませんが、Visual Studio SDK / VSIP インターフェイスを使用してアクセスできます (具体的には、MSBuild プロパティにアクセスするために IVsBuildPropertyStorage インターフェイスを取得する必要があります)。コード スニペットを次に示します (VSPackage のメニュー コマンド ハンドラーで実行されます)。

IVsSolution solution = GetService(typeof(SVsSolution)) as IVsSolution;

IVsHierarchy hierarchy;
solution.GetProjectOfUniqueName(@"SilverlightApplication2.Web\SilverlightApplication2.Web.csproj", out hierarchy);

IVsBuildPropertyStorage buildPropertyStorage = hierarchy as IVsBuildPropertyStorage;

if (buildPropertyStorage != null)
{
    string silverlightAppListValue;
    buildPropertyStorage.GetPropertyValue("SilverlightApplicationList", "Debug", (uint)_PersistStorageType.PST_PROJECT_FILE, out silverlightAppListValue);

    MessageBox.Show(silverlightAppListValue);
}

それでもアドインからこれを実行したい場合は、Craig が言及しているアプローチに従って、DTE オブジェクトを IServiceProvider にキャストする必要があります (GetService を呼び出すことができます)。

-アーロン・マーテン

于 2009-05-28T16:53:36.733 に答える
0

.sln ファイルは単なるテキスト ファイルであるため、メモ帳を使用して .sln ファイルを編集してみてください。そこから探している物件がきっと見つかるはずです。情報が理解できる形式であると仮定すると、単純なテキスト パーサーを使用して、プログラムで .sln から情報を抽出できるはずです。

于 2009-07-01T20:56:47.800 に答える