7月 212015
 
Pocket

仕様的な

  • Analyzer を使う際、Analyzer の依存アセンブリも Analyzer として参照追加する必要がある
    • 通常の参照追加じゃダメ
  • NuGet を用いた Analyzer のインストールは install.ps1 で行われる
  • RTM 版テンプレートの install.ps1 では、nupkg 解凍直下の analyzers ディレクトリにある dll を Analyzer として登録する
  • ので、上手いことそこにアセンブリが配置されるよう nuspec を書く必要がある
  • だがどうやら lib 配下以外に配置すると pack 時に怒られるので、-NoPackageAnalysis オプションが必要
  • この仕様では、Analyzer の依存アセンブリは同梱配布しかできないのではないか疑惑 (PowerShell頑張ればなんとかなるんだろうか)

とりあえずどうすればいいのか

  • csproj を使って nuget pack する前提の nuspec を書くパターン
  • bin\$configuration$\ 直下の dll を全部 analyzers ディレクトリに突っ込むようにする(Analyzer 開発用アセンブリは除外)
  • Analyzer が依存してるアセンブリの「ローカルにコピー」を True にして含まれるようにする
  • プロジェクト新規作成時点で指定されている packages.config の中身は開発時しか使わないので developmentDependency=”true” にして利用時の依存を除外

こんな感じ。

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
  <metadata>
    <id>$id$</id>
    <title>$title$</title>
    <version>$version$</version>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl>
    <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>$description$</description>
    <language>ja-JP</language>
    <tags>analyzers</tags>
    <frameworkAssemblies>
    </frameworkAssemblies>
    <dependencies>
    </dependencies>
  </metadata>
  <files>
    <file src="bin\$configuration$\*.dll" target="analyzers\" exclude="**\Microsoft.CodeAnalysis.*;**\System.Collections.Immutable.*;**\System.Reflection.Metadata.*;**\System.Composition.*" />
    <file src="tools\*.ps1" target="tools\" />
  </files>
</package>

で、こう

[crayon]
nuget pack Hoge.csproj -NoPackageAnalysis -Properties Configuration=Release
[/crayon]

 Leave a Reply