著作一覧 |
どこにも正しい情報が見当たらないのでメモ。
やりたいことは、COMのDLLを参照しているC#のビルドをCIマシンで行うこと。
問題はCIマシンは独自に管理されているから、COMのDLLをレジストリへ登録するのが手続き的にばかげてあり得ないことだ。
というわけで、DLLをRegsvr32せずにビルド環境で取り込みたい。
Visual Studioがローカル環境のレジストリを参照して作成した要素はCOMReferenceだ。これを書き直す。
StackOverflowにはRegistering COM referenced DLLs on a build serverがあり、ほとんど正しいのだが決定的に間違っている。もしかするとVS2015で扱いがかわったのかも知れない(2012年の投稿)。
利用するのは、COMFileReference要素だ。
StackOverflowにはHintPathが使えるとコメントされているが、VS2015(V14.0)のMSBuildでは使えない。
COMFileReferenceのInclude属性に相対パスを記述すると正しく処理できる。
<ItemGroup> <COMFileReference Include="..\COMDLLs\MyComLibrary.dll"> <EmbedInteropTypes>True</EmbedInteropTypes> </COMFileReference> </ItemGroup>
Includeで指定するDLLはネイティブCOM DLLであって、TlbImpしたDLLではない。
ジェズイットを見習え |