6月 252015
 

基本的にはこれで→AppVeyor で NuGet パッケージの作成とデプロイを自動化 | grabacr.nét

困ったこと

  • 最初、バージョン管理 その1 の方法でやってた
  • でも push する度 nuget.org にデプロイされるのはこまる
    • push した際、常に nuget.org にデプロイしたいわけじゃない
    • AppVeyor の deployment condition で master ブランチの時だけとかある程度コントロールできるようだけど足りない
  • デプロイしたい時だけできるようにしたい

解決策

ぐらばくせんせーに聞いたところ、以下の解決策が提示されました。

  • AssemblyInfo patching を止める
    • AppVeyor の Build version は使わない&気にしない
  • バージョン番号は AssemblyInfo.cs だけで管理
  • nuspec は変わらず <version>$version$</version> としておけば AssemblyInfo.cs のバージョン番号の NuGet パッケージになる
  • デプロイしたい時に AssemblyInfo.cs のバージョンを上げて push

AssemblyInfo.cs のバージョンを変更しないで push した場合、NuGet パッケージ自体は作成されますが、nguet.org に投げても「もうそのバージョンはあるぜ!」と言われてスキップされます。

ビルドも失敗するわけではない。いい感じですね。。

おまけ

Branches and Tags – Appveyor には APPVEYOR_REPO_TAG でタグが push されたかどうかわかるっぽく書いてあったので、タグで管理できるかと一瞬思ったけど、true になる場合を観測できなかったので諦め。

6月 262014
 
  • 「NuGet パッケージの復元の有効化」を有効にしてる
  • プライベートリポジトリなどデフォルト以外のリポジトリを利用している

この時、PackageSourceを追加しないと復元に失敗する。
VisualStudioのオプションで追加している場合は成功するが、未設定環境では当然ながら失敗するため、設定をソースと一緒に配信したくなる。

追加できる場所で、容易にソースと一緒に配信できるのは以下のどちらか。

  • .nuget\NuGet.Config
    参照:NuGet Config Settings
  • .nuget\NuGet.targets
    <ItemGroup Condition=" '$(PackageSources)' == '' ">
    <!-- Package sources used to restore packages. By default, registered sources under %APPDATA%\NuGet\NuGet.Config will be used -->
    <!-- The official NuGet package source (https://www.nuget.org/api/v2/) will be excluded if package sources are specified and it does not appear in the list -->
    <!--
        <PackageSource Include="https://www.nuget.org/api/v2/" />
        <PackageSource Include="https://my-nuget-source/nuget/" />
    -->
    </ItemGroup>
    

  • ConfigではKeyの指定があるが、targetsにはない
  • Configは、%APPDATA%\NuGet\NuGet.Config等、他の同時に読み込まれるNuGet.Configの影響も受けてしまう
    • disabledPackageSourcesで当該キーのソースが指定されていると、無効化されてしまうため、注意が必要となる
    • VisualStudio のオプションでチェックボックスをオフにするとdisabledPackageSourcesに含まれてしまう
  • Reference の解説をさらっと見た限りではConfigの書き方しか書いてない
  • NuGetパッケージマネージャーをバージョンアップした時の影響は不明…
6月 262014
 

ライブラリのビルド時等にしか使わず、利用側では不要なNuGetパッケージを無視したい時がある。
そんな時はpackagedevelopmentDependencytureにすれば依存関係がなくなって幸せになれる。

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.AspNet.WebApi.Client" version="5.1.2" targetFramework="net45" />
  <package id="MSBuildTasks" version="1.4.0.74" targetFramework="net45" developmentDependency="true" />
  <package id="Newtonsoft.Json" version="4.5.11" targetFramework="net45" />
</packages>