2016-08-17 7 views
0

いくつかのASP.NET Web APIプロジェクトを標準化するために、ナゲットパッケージを使用しています。 nugetパッケージが行うべきことの一部は、XMLドキュメントが無効になっている場合はそれを有効にして、コントローラからのXMLコメントをヘルプエリアで使用できるようにすることです。私は自分のナゲットパッケージにInstall.ps1用のPowerShellスクリプトを作成しましたが、実際にはcsprojファイルを変更していないようです。私は、XMLドキュメントファイルを無効にして、新しいWeb APIプロジェクトにパッケージをインストールしています。期待通りの動作をしていません。私はそれが実行されていることを知っている私はいくつかの他のエラーが修正されなければならなかったので、今私は間違いや何かを示唆するためのエラーやフィードバックを得ていない。これは、ナゲットパッケージをインストールするときにビジュアルスタジオで呼び出されるように、これをデバッグするのはかなり難しいようだから、どんな助けもありがたいです。CSPROJ XMLドキュメントファイルをPowerShellでNugetパッケージで有効にする

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

$doc = New-Object System.Xml.XmlDocument 
$doc.Load($project.FullName) 
$nsManager = New-Object System.Xml.XmlNamespaceManager($doc.NameTable) 
$nsManager.AddNamespace('tu','http://schemas.microsoft.com/developer/msbuild/2003') 

$node = $doc.SelectSingleNode('//tu:PropertyGroup',$nsManager) 

$docNode = $node.SelectSingleNode('//tu:DocumentationFile', $nsManager) 

if(!$docNode) 
{ 
       # need to add documentation file 
       $element = $doc.CreateElement('DocumentationFile') 
       $element.InnerText = 'App_Data\MyProject.xml' 
       $node.AppendChild($element) 
       $doc.Save($project.FullName) 
} 

答えて

0

誰かが同様の問題に遭遇する場合。私はpowershellでこの仕事をする方法を考え出したことはありません。 Write-Hostを使用してXmlDocumentを出力していましたが、更新されたことがわかりましたが、* .csprojファイルは$ doc.Saveの呼び出しで更新されませんでした。私がこれに取り組んだほど、PowerShellは新しいバージョンのナゲットでは適切な解決策ではないことがわかりました。バージョン2.5以上のナゲットを使用している場合は、msbuild .propsファイルを使用してプロパティを変更してください。私の場合、DocumentationFileプロパティを設定したいので、パッケージにサブディレクトリを作成し、というpackageid.propsというファイルを追加しました(packageidを実際のNugetパッケージIDに置き換えます)。ファイルの内容は次のようになります。このファイルで

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <DocumentationFile>App_Data\MyProject.xml</DocumentationFile> 
    </PropertyGroup> 
</Project> 

私csprojファイルがnugetパッケージがインストールされており、DocumentationFileプロパティが正常に設定されますとき小道具ファイルにリンクするように更新され、含まれています。

+0

あなたの問題を解決してくれてうれしくありがとう、ここであなたの答えを共有してくれてうれしいです。同じ問題を抱えている他のコミュニティにとって有益なあなたの答えを記入してください。 –

1

私はこの問題に取り組んでいましたが、これが私の解決策でした。私はWebプロジェクトのためのnugetパッケージを扱っていたので、binフォルダー内のxmlファイルをデフォルトの設定としてbin \ Debugまたはbin \ ReleaseまたはApp_Dataの元の質問のようにするのではなく、 。

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

# save project first 
$project.Save() 

$xml = [xml](Get-Content -path $project.FullName) 
$default = $xml.Project.PropertyGroup | Where-Object { $_.Condition -eq $null -and $_.ProjectGuid -ne $null } 
if($default.DocumentationFile -eq $null) { 
    $path = "bin\$($default.AssemblyName).xml" 
    $node = $xml.CreateElement('DocumentationFile', $xml.DocumentElement.NamespaceURI) 
    $node.InnerText = $path 
    $default.AppendChild($node) | Out-Null 

    # Write formatted xml 
    $stringWriter = New-Object System.IO.StringWriter 
     $xmlWriter = New-Object System.XMl.XmlTextWriter $stringWriter 
     $xmlWriter.Formatting = “indented” 
     $xmlWriter.Indentation = 2 
     $xml.WriteContentTo($xmlWriter) 
     $xmlWriter.Flush() 
     $stringWriter.Flush() 
     $stringWriter.ToString() | Out-File -FilePath $project.FullName -Encoding utf8 -Force 
     $xmlWriter.Dispose() 
    $stringWriter.Dispose() 
} 
+0

この解決策は良いです!意図どおりに動作します。 –

関連する問題