21

現在、Linker/Advanced/KeyFile オプションを設定しています。

「 mt.exe : 一般的な警告 810100b3: 厳密な名前の署名付きアセンブリであり、マニフェストを埋め込むと署名が無効になります。このファイルを有効なアセンブリにするには、このファイルに再署名する必要があります。」というメッセージが表示されます。.

Web から読むと、遅延署名オプションを設定し、SDK をダウンロードし、ビルド後のイベントとして sn.exe を実行する必要があるようです。VS2010 でこの一般的な操作を行うためのより簡単な方法があるに違いありません。

4

6 に答える 6

15

ここにはかなりの不自由があります。これは以前は機能しませんでした。これは VS2010 で「修正」され、mt.exe は警告を表示する代わりに警告を生成するようになりました。実際の修正ではなく、明白な修正もありません。リンカーは署名を埋め込むだけではなく、後で mt.exe を実行することもできません。

解決策は、ビルド後のイベントでアセンブリに再署名することです。次のようにします。

Command = sn -Ra "$(TargetPath)" $(ProjectName).snk

キー ファイルをまだ持っていない場合は、自分で .snk ファイルを作成し、Visual Studio コマンド プロンプトから sn.exe を実行する必要があります。例えば:

cd \whereTheProjectIsLocated
sn.exe -k MyProject.snk

または、コンテナーから抽出するか、指定したキー ファイルを使用します。遅延署名は、適切なコマンド ライン オプションを指定して sn.exe を実行するだけです。

于 2010-04-17T00:41:36.943 に答える
14

Microsoft.Cpp.Win32.targets を編集できない、または編集しない場合は、プロジェクト ファイルに次を追加することもできます。

<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <!-- snip -->
    <ItemDefinitionGroup>
      <Link>
        <KeyFile>$(LinkKeyFile)</KeyFile>
      </Link>
    </ItemDefinitionGroup>
</Project>
于 2012-02-22T15:50:43.110 に答える
2

Paul Mead の提案は正しい方向に進んでいますが、これは決定的なようです: http://blogs.msdn.com/b/vcblog/archive/2011/03/11/10140139.aspx。テキストを変更するのは簡単ですが、"%" を "$" に変更することは省略してください。

于 2012-01-17T14:36:48.327 に答える
1

私の経験では、最も簡単な方法は次のとおりです。

1) Visual Studio コマンド プロンプト 2010 を開きます。プロジェクト ディレクトリ (ソース ファイルを含むディレクトリ) に移動します。次に、 と入力しsn -k yourKeyName.snkます。

2) Visual Studio 2010 でプロジェクトを開き、AssemblyInfo.cpp ファイルを開き、この行を追加します[assembly:AssemblyKeyFileAttribute("yourKeyName.snk")];

3) Project->Properties->Linker->Advanced を開きます。そして「キーファイル」スロットに入れyourKeyName.snkます。また、「Delay Sign」スロットで を選択しますYes (\DELAYSIGN)

4) 通常どおりプロジェクトをビルドします。

于 2015-02-13T17:32:51.580 に答える
1

WIN32 プラットフォーム用の VS2010 SP1 でこの問題に遭遇しました。ビルド .log ファイルを見ると、/KEYFILE パラメータが .DLL の最初のリンクに指定されていましたが、マニフェストが作成され、マニフェストを含めるために 2 番目のリンクが作成された後、/KEYFILE パラメータが欠落していました。少し調べてみたところ、C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32 の Microsoft.Cpp.Win32.targets ファイルに問題があることがわかりました。2 番目のリンクの KeyFile 属性にタイプミスがあります。441行目を変更して修正しました:

    KeyFile                        ="%(Link.KeyFile)"

    KeyFile                        ="$(LinkKeyFile)"

この変更により、2 番目のリンカー パスに /KeyFile 修飾子が含まれ、.DLL は publickey が埋め込まれた状態で適切にビルドされました。

于 2011-10-28T00:18:49.903 に答える