KanColleViewer プラグインの作り方などをダラダラと書きます。
(何か思いついたら適宜更新するかも)
※ KanColleViewer 4.2 現在のもの
KanColleViewer プラグインの作り方などをダラダラと書きます。
(何か思いついたら適宜更新するかも)
※ KanColleViewer 4.2 現在のもの
とりあえず簡単に。
ちゃんとしたのはそのうち気が向いたら書くかも。
でも既存開発者はわかってる人たちだからこれでも十分な気が……
新規開発も追々。
むしろちゃんと書くべきはこっち。。
KanColleViewer 4.0 がリリースされましたが、プラグインシステムが刷新されたため、3.x のプラグインは利用できなくなりました。
Release version 4.0 · Grabacr07/KanColleViewer
プラグイン システムの刷新 (version 3.8.2 またはそれ以前に向けて作られたプラグインは使用できなくなります)
というわけで、3.x プラグインをどう移行すればいいかを 雑に 簡単に説明します。
実際のコードは、本体に付属しているプラグインの実装などを参考にすると良いでしょう。
どうやらレジストリを追加することで一応動くようで。
参照 : 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
メソッドにアセンブリ参照を追加している箇所があるので、そこに追加します。
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 版でのテンプレートの問題なので、もしかしたら将来変更されるかもしれませんね。
基本的にはこれで→AppVeyor で NuGet パッケージの作成とデプロイを自動化 | grabacr.nét
ぐらばくせんせーに聞いたところ、以下の解決策が提示されました。
<version>$version$</version>
としておけば AssemblyInfo.cs のバージョン番号の NuGet パッケージになるAssemblyInfo.cs のバージョンを変更しないで push した場合、NuGet パッケージ自体は作成されますが、nguet.org に投げても「もうそのバージョンはあるぜ!」と言われてスキップされます。
ビルドも失敗するわけではない。いい感じですね。。
Branches and Tags – Appveyor には APPVEYOR_REPO_TAG
でタグが push されたかどうかわかるっぽく書いてあったので、タグで管理できるかと一瞬思ったけど、true
になる場合を観測できなかったので諦め。
さて巷ではJVNVU#98282440: 「提督業も忙しい!」(KanColleViewer) がオープンプロキシとして動作する問題が話題ですが、FiddlerCore は何も考えないで実装すると恐らくこうしてしまうような仕様です。クソですね。。
とりあえず適当に FiddlerCore を使ったアプリケーションを立ち上げてみましょう。
[csharp]
FiddlerApplication.Startup(55555, FiddlerCoreStartupFlags.Default);
[/csharp]
するとあら不思議、0.0.0.0:55555でListningされてしまいます。
[raw]
C:\Windows\system32>netstat -a -b -n -o -p TCP
アクティブな接続
プロトコル ローカル アドレス 外部アドレス 状態 PID
…(中略)…
TCP 0.0.0.0:55555 0.0.0.0:0 LISTENING 6688
[FiddlerTest.vshost.exe]
[/raw]
これではアプリが立ち上がってる間は外部からHTTPプロキシとして利用できてしまいます。
知らず知らずのうちに他所様への攻撃の踏み台にされて、ある日突然警察がやってくるなんてこともあるかもしれません。怖いですね。
で、どうすればいいかというと、127.0.0.1:55555でLisningするようにできればローカルプロセスしかアクセスできなくなるので、そう変更したいですね?
これはごく簡単で、AllowRemoteClients
をfalse
にしてやればOKです。
[csharp]
FiddlerApplication.Startup(55555
, FiddlerCoreStartupFlags.RegisterAsSystemProxy
| FiddlerCoreStartupFlags.ChainToUpstreamGateway
| FiddlerCoreStartupFlags.MonitorAllConnections
| FiddlerCoreStartupFlags.CaptureLocalhostTraffic);
[/csharp]
Flagなので指定しなければOK。
[raw]
C:\Windows\system32>netstat -a -b -n -o -p TCP
アクティブな接続
プロトコル ローカル アドレス 外部アドレス 状態 PID
…(中略)…
TCP 127.0.0.1:55555 0.0.0.0:0 LISTENING 7128
[FiddlerTest.vshost.exe]
[/raw]
つまりFiddlerCoreStartupFlags.Default
がイカンわけです。
でも FiddlerCore は Fiddler.exe のUI以外の部分を抜き出したものなわけですから、Fiddler.exe 自体がそういうもんだという可能性もあります。
参照: FiddlerCore – Fiddler Proxy Engine for your .NET Applications
ここで Fiddler.exe および FiddlerCore のデフォルト値を見てみましょう。
グループ化したい時はControlTemplate
にItemsPresenter
を使わないとダメっぽい
また、ItemsPanel を指定せず、前述の ControlTemplate でコレクション項目の並べ方を指定する方法もあります。ControlTemplate 内に ItemsPresenter を配置する代わりに、Panel の派生クラスを指定し、IsItemsHost プロパティに True を設定します。
のだけども、グループ化して表示したい場合うまく表示されない。
※実際やりたかったこととは違うけど例なので……
WindowsでVPN接続すると、VPN接続先がデフォルトゲートウェイとなるようなルールがルーティングテーブルに追加される。
VPN経由でインターネット接続できる場合は特に問題ないが、そうでない場合はVPN接続中はインターネットが利用できなくなってしまう。
以下の設定により、VPN接続先をデフォルトゲートウェイとするルーティングルールの追加が行われなくなり、VPNのサブネット以外への通信はVPNを経由せず直接インターネット接続するようになる。
めとべや東京 #7 で話したやつです。
NuGet で更新する度にコピーし直さないといけないけど……
Issue 8
Symptom
ClickOnce applications targeting .NET Framework 4.0 that reference the Microsoft.Net.Http package may experience a TypeLoadException or other errors after being installed.
Resolution
This occurs because ClickOnce fails to deploy certain required assemblies. As a workaround, do the following:
Right-click on the project and choose Add Existing Item
Browse to the HttpClient net40 package folder
In the File name text box enter *.*
Holding CTRL, select System.Net.Http.dll and System.Net.Http.Primitives.dll
Click the down-arrow next to the Add button and choose Add as Link
In Solution Explorer, holding CTRL select System.Net.Http.dll and System.Net.Http.WebRequest.dll
Right-click the selection, choose Properties and change Copy to Output Directory to Copy always
Republish
引用元:http://blogs.msdn.com/b/bclteam/p/httpclient.aspx
System.Net.Http.Primitives.dll とか System.Net.Http.WebRequest.dll のことも書いてあるけど、 System.Net.Http.dll だけでOKだった。
むしろ System.Net.Http.Primitives.dll をコピーしてると、起動時に「もうあるよ!」的なエラーで死んだ。
そもそも手順的に Primitives をコピーしてるのになぜ WebRequest が出てくるのか……怪しげな説明。。
Issue 9
Symptom
ClickOnce applications targeting .NET Framework 4.0 that reference the Microsoft.Bcl or Microsoft.Bcl.Async packages may experience a TypeLoadException or other errors after being installed.
Resolution
This occurs because ClickOnce fails to deploy certain required assemblies. As a workaround, do the following:
Right-click on the project and choose Add Existing Item
Browse to the Microsoft.Bcl net40 package folder
In the File name text box enter *.*
Holding CTRL, select System.Runtime.dll and System.Threading.Tasks.dll
Click the down-arrow next to the Add button and choose Add as Link
In Solution Explorer, holding CTRL select System.Runtime.dll and System.Threading.Taks.dll
Right-click the selection, choose Properties and change Copy to Output Directory to Copy always
Republish
引用元:http://blogs.msdn.com/b/bclteam/p/asynctargetingpackkb.aspx