ネイティブC++とC++/CLIでビルドされたプロジェクトがあります。私は次のコンポーネントを持っています:
アセンブリA(C ++ / CLI) | 使用 アセンブリB(C ++ / CLI) | 使用 静的LibC(ネイティブC ++)
Static Lib Cを大幅に書き直したところ、コンパイルされ、それを使用する他のネイティブプロジェクトも正常にコンパイルされました。再書き込みでアセンブリBは変更されませんでした。予想どおり、アセンブリBをコンパイルすると、エラーや警告なしで正常にコンパイルされます。ただし、アセンブリAをコンパイルしようとすると、アセンブリBで使用できるはずのシンボルが見つからないため、何百ものエラーが発生します。運が悪かったので、Aプロジェクトの参照としてBとCを追加および削除してみました。私はクリーンを実行し、すべてを最初から再構築しようとしましたが、それでも運がありませんでした。アセンブリBをRedGateのReflectorにロードしましたが、シンボルが表示されないので、少なくともそれは一貫しています。ブランチで作業しているので、トランクから以前のバージョンのアセンブリBをロードしました(ブランチからロードした以前のバージョンをアンロードするように求められました)。その中のすべてのシンボルを見ることができました。したがって、Reflectorで現在のバージョンのAssembly Bを見ると、次のようになります。
+ TFModelSetNETD、Version = 1.0.3532.42171、Culture = neutral、PublicKeyToken = null + TFModelSetNETD.dll +参照 +{}- + <CppImplementationDetails> + <CrtImplementationDetails> + vc_attributes
そしてそれがすべてです。古いバージョンでは、これらの4つのエントリに加えて、アセンブリB、静的Lib C、その他のライブラリで宣言されたすべての名前空間に加えて、いくつかのboostおよびstd名前空間が表示されます。これはVisualStudio2008にあります。
ここで何が起こっているかについて何かアイデアはありますか?なんらかの警告を出さずに、コンパイラがシンボルをエクスポートしないようにするために何ができたのか理解できません。
アイデア、ヒント、またはデバッグの提案はすべて大歓迎です。
編集:静的Lib CをLibDumpにロードしましたが、すべてのシンボルがあります-ただし、Redgate Reflectorで調べると、アセンブリBで定義されているシンボル、または静的LibCから参照されているシンボルはアセンブリBに表示されません。