私はネイティブC++、およびC++/CLIでビルドされたプロジェクトを持っています。 アセンブリから.NETシンボルが消える
Assembly A (C++/CLI) | uses Assembly B (C++/CLI) | uses Static Lib C (Native C++)が、私は静的のLib Cの主要な再書き込みをした、そしてそれはコンパイルして、それを使用する他のネイティブのプロジェクトが同様に罰金コンパイル:私は、次のコンポーネントがあります。アセンブリBは再書き込みで変更されませんでした。アセンブリBをコンパイルすると、エラーや警告なしで正常にコンパイルされます。しかし、アセンブリAをコンパイルしようとすると、アセンブリBで使用可能と思われるシンボルが見つからず、何百ものエラーが発生します。私は運がないAプロジェクトの参考文献としてBとCを追加して削除しようとしました。私はきれいにして、一からすべてを再構築しようとしました - しかしまだ運がありません。私はアセンブリBをRedGateのリフレクタにロードしました。シンボルを見ることができないので、少なくとも一貫しています。私はブランチで作業しているので、トランクからアセンブリBの以前のバージョンをロードしました(そして、私がブランチからロードした以前のバージョンをアンロードするように頼んだ)、その中のすべてのシンボルを見ることができました。ですから、反射板のアセンブリBの私の現在のバージョンを見ると、私は参照してください:
+TFModelSetNETD, Version=1.0.3532.42171, Culture=neutral, PublicKeyToken=null +TFModelSetNETD.dll + References + {} - + <CppImplementationDetails> + <CrtImplementationDetails> + vc_attributes
それだけです。古いバージョンでは、これらの4つのエントリと、Assembly B、Static Lib C、他のlibs、いくつかのboostとstdの名前空間で宣言されたすべての名前空間を参照しています。私はこれがVisual Studio 2008であることを言及する必要があります。
ここで何が起こっているかについてのアイデアはありますか?コンパイラにシンボルをエクスポートしないようにするために何ができたのか理解できず、警告を出すことはできません。
アイデア、ヒント、またはデバッグのアドバイスはすべて大変ありがとうございます。
編集:静的リブCをLibDumpにロードしましたが、すべてのシンボルがありますが、アセンブリBで定義されたシンボルもスタティックLib Cから参照されるシンボルもアセンブリBでは表示されませんレッドゲートリフレクター。
AとBはdllかそうですか? – Lodle
同じアセンブリの最新の.vcprojファイルに対して、アセンブリBの以前の.vcprojファイルのコピーをチェックアウトする方法はありますか?これらのファイルは、多少人間が読めるだけで、プロジェクトのフラグ/オプションが誤って切り替えられた可能性があります。 – reuben
Lodle:AとBは両方ともDLLです Reuben:良い提案!私はこれを試しました。ヘッダーとcppファイルのセクションにはたくさんの差分がありますが、1)私のprojがUnicodeに設定されていて、それ以外のものはすべてMBCSであり、 "ShowIncludes"新しいプロジエクトにShowIncludes = falseがありました。私はチャーセットをMBCSに戻し、清掃してビルドしましたが、喜びはありません。 あなたのコメントをありがとう! –