次のビルド後の手順で、この質問/clr
に従って署名しようとしているスイッチを使用するマネージ C++ アセンブリがあります。
sn -Ra "$(TargetPath)" MyKey.snk
ただし、これにより次のエラーが発生します。
C:\Path\Assembly.dll does not represent a strongly named assembly
何がうまくいかないのですか?
AssemblyInfo.cpp で遅延署名のアセンブリをマークしましたか?
[assembly:AssemblyKeyFileAttribute("MyKey.snk")];
[assembly:AssemblyDelaySignAttribute(true)];
私はこれを最終的に理解しました-リンクされた質問に従って、Linker/Advanced/KeyFile
オプションを設定してそれが機能することを期待することはできません-sn.exe
アセンブリに署名するために使用する必要がありますが、それでもLinker/Advanced/KeyFile
オプションを設定する必要があります。
要するに、/ clrアセンブリに署名するには、次の両方を行う必要があります。
Linker/Advanced/KeyFile
プロパティページでキーファイルを指定しますsn.exe
ビルド後のステップとしてアセンブリに署名するために使用します(を使用すること[assembly:AssemblyKeyFileAttribute("MyKey.snk")]
は、プロジェクトのプロパティダイアログでキーファイルを設定することと同じだと思います)。
マークされた回答は、最終的な解決策に到達するのに役立ちました (そのため、私から +1 を受け取ります)。
ただしAssemblyInfo.cpp
、VS2010 で を作成する方法を理解するために、イライラする数分を費やさなければなりませんでした。
以下は、問題に対する「より多くの」完全な回答です。
#include "stdafx.h"
using namespace System;
using namespace System::Reflection;
using namespace System::Runtime::CompilerServices;
using namespace System::Runtime::InteropServices;
using namespace System::Security::Permissions;
[assembly:AssemblyKeyFileAttribute("YourAssembly.snk")];
[assembly:AssemblyDelaySignAttribute(true)];
次に、ビルド後のステップとして、実行しますsn -Ra YourAssembly.dll YourAssembly.snk