0

2 つのソリューションがあり、どちらも各プロジェクトのプロパティ ページの [署名] ページで [アセンブリに署名する] チェック ボックスがオンになっています。

ソリューション A はすべてのプロジェクトに署名し、問題はありません。実際、ソリューション A は、アセンブリに厳密な名前がなく、最終的なアプリケーション アセンブリのビルドに失敗したと訴えました。確認したところ、そのアセンブリにデジタル署名がありませんでした。

そのアセンブリは、別のソリューションであるソリューション B で作成され、参照されていました。私はそのソリューションに移動し、アセンブリに署名するために同じステートメントを追加しました。また、ソリューション A のようにチェックして、クリック ワンス マニフェストに署名しました。

ソリューション B は、問題、警告、エラーなしでビルドします。Visual Studio は、DLL と付随するテスト アプリケーションをビルドしました。最初にソリューションをクリーンアップし、デバッグしてリリースしてから、デジタル署名なしでソリューションをビルドしました。

ブラウザを使用して選択したデジタル証明書を購入しました。デジタル証明書にはパスワードがあり、PFX 拡張子が付いています。

ソリューション A では、ソリューション内のすべてのプロジェクトのパスワードを入力するように求められました。アセンブリに署名するようにすべてのプロジェクトを設定しました。解決策 B ではパスワードを要求されませんでした。

問題が発生したときは、ソリューションとプロジェクトをゼロから再作成し、既存の CS ファイルをソリューションに追加するだけでよいと考えました。基本的に、プロジェクト ファイルとソリューション ファイルを再作成しました。それはまったく同じ結果でした。ソリューション A と B の両方でアセンブリ情報ファイル Project\AssemblyInfo.cs を比較したところ、実際の違いは見られませんでした。

アップデート:

リクエストごとに、ビルド ウィンドウの出力を次に示します。残念ながら、デフォルトでは詳細なビルド情報はありません。私はそれを望んでいました。

BuildVersionIncrement: Pre-build process : Completed
1>------ Build started: Project: SolutionB, Configuration: Release Any CPU ------
1>  SolutionB -> F:\Projects\SolutionB\Versions\2014\SolutionB\bin\Release\SolutionB.dll
2>------ Build started: Project: TesterSolutionB, Configuration: Release Any CPU ------
2>  TesterSolutionB -> F:\Projects\SolutionB\Versions\2014\TesterSolutionB\bin\Release\TesterSolutionB.exe
========== Build: 2 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
BuildVersionIncrement: Post-build process : Completed

更新 2: C#.Net を使用しています。1 つのプロジェクトはクラス ライブラリで、もう 1 つは Winforms プロジェクトです。.Net Framework 4.5.1 を選択しました。


何が原因で、どうすれば問題を解決できますか? 残念ながら、出力ウィンドウには詳細なビルドの詳細が表示されません。

4

1 に答える 1

2

作業中のプロジェクトからの詳細なビルド出力を非作業中のプロジェクトと比較するとわかりました。

私見ですが、この問題は Microsoft Visual Studio 2013 (および以前のバージョン) の欠陥としてフラグを立てます。何十年も前に何をすべきかを理解していましたが、今では忘れてしまいました。

とにかく、プロジェクト プロパティ ページの [ビルド イベント] タブに [ビルド後のイベント コマンド ライン] エントリが追加されていません。署名ページですべての情報を指定する必要はないと考える人もいるでしょう。なんでもいい。

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe" sign /f <path to pfx file> /p <mypassword> /t http://timestamp.verisign.com/scripts/timstamp.dll "$(TargetDir)$(TargetFileName)"

また、他の構成についても同様の行を追加します。この追加により、[署名] タブが役に立たなくなります。

于 2013-11-14T00:05:09.173 に答える