veigr

8月 182015
 

しんたろーさんのC88でのオリジナルキャラ抱き枕カバーです。
見た目は某金色に似てるなぁと思ったら、同人誌の方にもそう書いてあって。。

翔鶴は肌ちょっと黄色いかなと感じましたが、こちらは特にそういう印象は受けませんでした。
瑞鶴も待ってます!

※この先18歳未満は閲覧禁止※

Continue reading »

8月 172015
 

人気投票第1位(そして胸囲も1位)の桜花です。
個人的にも一番好きなキャラなので、ようやく出てくれて嬉しい限り。。

出来はいつもどおり安定。。

※この先18歳未満は閲覧禁止※

Continue reading »

8月 152015
 

なちゅらるとんさんの利根(改二)抱き枕カバーです。
参照: 「利根抱き枕カバー」/「なちゅらるとん一日目M-28b」のイラスト [pixiv]

絵は好きなんですけど、線と印刷の粗さが少々目立ちます。

※この先18歳未満は閲覧禁止※

Continue reading »

8月 112015
 

とりあえず簡単に。
ちゃんとしたのはそのうち気が向いたら書くかも。
でも既存開発者はわかってる人たちだからこれでも十分な気が……

新規開発も追々。
むしろちゃんと書くべきはこっち。。

KanColleViewer 4.0

KanColleViewer 4.0 がリリースされましたが、プラグインシステムが刷新されたため、3.x のプラグインは利用できなくなりました。

Release version 4.0 · Grabacr07/KanColleViewer

プラグイン システムの刷新 (version 3.8.2 またはそれ以前に向けて作られたプラグインは使用できなくなります)

というわけで、3.x プラグインをどう移行すればいいかを 雑に 簡単に説明します。

実際のコードは、本体に付属しているプラグインの実装などを参考にすると良いでしょう。

Continue reading »

8月 062015
 

記事のメモ。

Windows の HTTP スタックには他にも HTTP.sys があるが、基本 IIS 向けのカーネルモードドライバとして動作する HTTP リスナーで、クライアントアプリには超使いにくいやつなんで今回は省略。
なお .NET Framework の System.Net.HttpListener の中身は HTTP.sys なので、アレもサーバー以外では超絶使いにくい。

7月 212015
 

仕様的な

  • 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>

で、こう

nuget pack Hoge.csproj -NoPackageAnalysis -Properties Configuration=Release
7月 102015
 

参照 : Damir’s Corner – Quick Guide to Unit Testing Diagnostic Analyzers

Visual Studio 2015 RC にて、.NET Compiler Platform SDK Templates for RC の「Analyzer with Code Fix」テンプレートで Analyzer 用のプロジェクトを作成すると、自動的にテストプロジェクトも生成されます。

んでもってこれを使ってテストコードを書くわけですが、どうやらここでテストコードに与えるソース文字列がコンパイル通らないコードだとテストに失敗することがあるようです。

で、アセンブリ参照が足りない場合なんかも同様にコケるわけですが、テストプロジェクトにアセンブリ参照を追加しても残念ながら参照してくれません。

ではどうすれば良いかというと、テストプロジェクトの Helpers/DiagnosticVerifier.Helper.cs 内の CreateProject メソッドにアセンブリ参照を追加している箇所があるので、そこに追加します。

[csharp mark=”4-7,23-24″]
public abstract partial class DiagnosticVerifier
{
//中略
private static readonly MetadataReference KanColleViewerCompositionReference
= MetadataReference.CreateFromAssembly(typeof(Grabacr07.KanColleViewer.Composition.IPlugin).Assembly);
private static readonly MetadataReference SystemComponentModelCompositionReference
= MetadataReference.CreateFromAssembly(typeof(System.ComponentModel.Composition.ExportAttribute).Assembly);
//中略
private static Project CreateProject(string[] sources, string language = LanguageNames.CSharp)
{
string fileNamePrefix = DefaultFilePathPrefix;
string fileExt = language == LanguageNames.CSharp ? CSharpDefaultFileExt : VisualBasicDefaultExt;

var projectId = ProjectId.CreateNewId(debugName: TestProjectName);

var solution = new AdhocWorkspace()
.CurrentSolution
.AddProject(projectId, TestProjectName, TestProjectName, language)
.AddMetadataReference(projectId, CorlibReference)
.AddMetadataReference(projectId, SystemCoreReference)
.AddMetadataReference(projectId, CSharpSymbolsReference)
.AddMetadataReference(projectId, CodeAnalysisReference)
.AddMetadataReference(projectId, KanColleViewerCompositionReference)
.AddMetadataReference(projectId, SystemComponentModelCompositionReference)
;

int count = 0;
foreach (var source in sources)
{
var newFileName = fileNamePrefix + count + “.” + fileExt;
var documentId = DocumentId.CreateNewId(projectId, debugName: newFileName);
solution = solution.AddDocument(documentId, newFileName, SourceText.From(source));
count++;
}
return solution.GetProject(projectId);
}
//以下略
[/csharp]

これでアセンブリが参照されるようになり、テストが通るようになります。

これは RC 版でのテンプレートの問題なので、もしかしたら将来変更されるかもしれませんね。

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 になる場合を観測できなかったので諦め。