2012-04-18 8 views
1

NuGetを介してソースコード変換として展開したいWPFコントロールがあるとします。NuGet DependentUpon files

コントロールには、UserControl.xaml.csとUserControl.xamlの2つのファイルが関連付けられています。

NuGet経由で展開すると、対象のプロジェクトにファイルがありますが、ソリューションエクスプローラに階層構造がありません。これは、NuGetが.csprojファイルにDependentUponプロパティを追加する方法を知らないためです。

回避策はありますか?この機能はNuGetのロードマップにありますか?

おかげ タル

+0

私はこれについての直接的な答えも経験もありませんが、おそらくプロジェクトのDTEオブジェクトを使用してプロジェクトを直接操作できるはずです。パッケージマネージャコンソールのように。 – 8DH

+0

PM>((get-project).ProjectItems | {$ _。Name -eq "UserControl.xaml"})ProjectItems – 8DH

答えて

3

答えはあなたのNuGetパッケージに/ toolsフォルダ内に置かれた場合は、インストール時に自動的に実行されます。具体的Install.ps1ファイルPowerShellは、あります。ここではトリックを行う必要がありますコードです:あなたはVisual Studioのインターフェイスですぐに変化が見られないことがあり

 
    param($installPath, $toolsPath, $package, $project) 

    $buildProject = @([Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection.GetLoadedProjects($project.FullName))[0] 

    $file = $buildProject.Xml.Items | Where Include -eq "UserControl.xaml.cs" 
    $propertyToEdit = $file.Metadata | Where Name -eq "DependentUpon" 

    if (!$propertyToEdit) 
    { 
     $file.AddMetaData("DependentUpon", "UserControl.xaml") | Out-Null 
    } 

    $project.Save() 

は、しかし、あなたが/リロードまたはクローズをアンロードする場合は/プロジェクトを開き、あなたはそれが表示されます。

+0

すばらしい答えです。 "$ item.AddMetaData(" DependentUpon "、" UserControl.xaml ")| Out-Null"行は "$ file.AddMetaData(" DependentUpon "、" UserControl.xaml ")| Out-Null"となります。 –

+0

ありがとう、@ CallumHibbert;私は訂正をしました。 –