トップ回答者
MsBuild実行時の証明書ファイルのへ取込方法

質問
-
回答
-
「証明書ストアではなくファイル(*.pfx)として証明書が複数用意されていて、ClickOnceの発行場所毎に証明書を切り替えたいので、MsBuildでビルドするときに、SignFileタスクの指定だけで証明書の切り替えが可能か?」
ということでしょうか?
その場合は、- ソリューションの構成マネージャーで新しいソリューション構成を作る。
- プロジェクトのプロパテの署名ページで証明書ファイルやタイムスタンプを指定した状態にして保存する。
- *.csprojをVisualStudioのXMLエディタやメモ帳で開く。
- 新しくPropertyGroupタグを作り、Condition属性で発行場所に対応する条件を設定する。
- ManifestKeyFile,ManifestCertificateThumbprint,ManifestTimestampUrlを上記PropertyGroupタグ内に移動させる。
- VisualStudioでプロジェクトを読み直す。
- 発行場所の数だけ繰り返す。
で行けると思う。
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <!-- 省略 --> <PropertyGroup> <SignManifests>true</SignManifests> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)'==Debug"> <ManifestKeyFile>TemporaryKey.pfx</ManifestKeyFile> <ManifestCertificateThumbprint>0123456789ABCDEF0123456789ABCDEF01234567</ManifestCertificateThumbprint> <ManifestTimestampUrl>http://timestamp.hoge-fuga.com/timestamp.dll</ManifestTimestampUrl> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)'==Release"> <ManifestKeyFile>ReleaseKey.pfx</ManifestKeyFile> <ManifestCertificateThumbprint>00112233445566778899AABBCCDDEEFF00112233</ManifestCertificateThumbprint> <ManifestTimestampUrl>http://timestamp.hoge-fuga.com/timestamp.dll</ManifestTimestampUrl> </PropertyGroup> <ItemGroup> <FileToSign Include="$(TargetPath)" /> </ItemGroup> <Target Name="Sign"> <SignFile CertificateThumbprint="$(ManifestCertificateThumbprint)" SigningTarget="@(FileToSign)" TargetFrameworkVersion="v4.5" /> </Target> </Project>
あとは
msbuild.exe solution.sln /property:Configuration=Debug /target:Publish msbuild.exe solution.sln /property:Configuration=Release /target:Publish
などのようにmsbuildの引数でプロパティを指定してやればConditionに対応した証明書で署名されると思います。
#意図が違うのであっても、Conditionで切り替えれば大抵の切り替えは行えます。
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
-
単に、msbuildの引数だけでダメでしたっけ?
--------------------------------
例:
A 環境用
msbuild.exe solution.sln /t:Clean;Publish /p:ManifestKeyFile="<A環境用の証明書のパス>" /p:ManifestCertificateThumbprint="<A環境用の証明書の拇印>"
B 環境用
msbuild.exe solution.sln /t:Clean;Publish /p:ManifestKeyFile="<B環境用の証明書のパス>" /p:ManifestCertificateThumbprint="<B環境用の証明書の拇印>"
--------------------------------
みたいな感じで。
すべての返信
-
「証明書ストアではなくファイル(*.pfx)として証明書が複数用意されていて、ClickOnceの発行場所毎に証明書を切り替えたいので、MsBuildでビルドするときに、SignFileタスクの指定だけで証明書の切り替えが可能か?」
ということでしょうか?
その場合は、- ソリューションの構成マネージャーで新しいソリューション構成を作る。
- プロジェクトのプロパテの署名ページで証明書ファイルやタイムスタンプを指定した状態にして保存する。
- *.csprojをVisualStudioのXMLエディタやメモ帳で開く。
- 新しくPropertyGroupタグを作り、Condition属性で発行場所に対応する条件を設定する。
- ManifestKeyFile,ManifestCertificateThumbprint,ManifestTimestampUrlを上記PropertyGroupタグ内に移動させる。
- VisualStudioでプロジェクトを読み直す。
- 発行場所の数だけ繰り返す。
で行けると思う。
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <!-- 省略 --> <PropertyGroup> <SignManifests>true</SignManifests> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)'==Debug"> <ManifestKeyFile>TemporaryKey.pfx</ManifestKeyFile> <ManifestCertificateThumbprint>0123456789ABCDEF0123456789ABCDEF01234567</ManifestCertificateThumbprint> <ManifestTimestampUrl>http://timestamp.hoge-fuga.com/timestamp.dll</ManifestTimestampUrl> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)'==Release"> <ManifestKeyFile>ReleaseKey.pfx</ManifestKeyFile> <ManifestCertificateThumbprint>00112233445566778899AABBCCDDEEFF00112233</ManifestCertificateThumbprint> <ManifestTimestampUrl>http://timestamp.hoge-fuga.com/timestamp.dll</ManifestTimestampUrl> </PropertyGroup> <ItemGroup> <FileToSign Include="$(TargetPath)" /> </ItemGroup> <Target Name="Sign"> <SignFile CertificateThumbprint="$(ManifestCertificateThumbprint)" SigningTarget="@(FileToSign)" TargetFrameworkVersion="v4.5" /> </Target> </Project>
あとは
msbuild.exe solution.sln /property:Configuration=Debug /target:Publish msbuild.exe solution.sln /property:Configuration=Release /target:Publish
などのようにmsbuildの引数でプロパティを指定してやればConditionに対応した証明書で署名されると思います。
#意図が違うのであっても、Conditionで切り替えれば大抵の切り替えは行えます。
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
-
単に、msbuildの引数だけでダメでしたっけ?
--------------------------------
例:
A 環境用
msbuild.exe solution.sln /t:Clean;Publish /p:ManifestKeyFile="<A環境用の証明書のパス>" /p:ManifestCertificateThumbprint="<A環境用の証明書の拇印>"
B 環境用
msbuild.exe solution.sln /t:Clean;Publish /p:ManifestKeyFile="<B環境用の証明書のパス>" /p:ManifestCertificateThumbprint="<B環境用の証明書の拇印>"
--------------------------------
みたいな感じで。 -
フォーラム オペレーターの星 睦美です。和田さん、今回は質問を投稿いただきありがとうございます。
和田さんの質問へのgekka さんとmars12 さんから返信が解決の糸口になったのではないかと思います。私のほうで[回答の候補に設定] しましたが、フォーラム ユーザーからの回答がお役にたちましたら投稿者から[回答としてマーク] いただければ幸いです。
フォーラムのヘルプ
https://social.msdn.microsoft.com/Forums/ja-JP/e164507c-7d3b-47d7-8be8-dd383e61507c?forum=announcejaそれではこれからもMSDN フォーラムをお役立てください。
フォーラム オペレーター 星 睦美 - MSDN Community Support