これは、継承されたすべてのメソッドが再実装されていることを確認するために内部のすべてのクラスをテストできるように、C++/CLI およびマネージド C++ アセンブリを見つける方法として始まりました。これをビルド プロセスのステップとして追加し、二度と起こらないようにしたいと思います。
この問題について考えると、使用されている .NET 言語を特定できると興味深いので、少し興味がわきました。このため、もう少し踏み込んで、すべての .NET 言語のアセンブリを比較しました。これまでのところ、リフレクションを介して .NET アセンブリの任意のセットからの型と属性データを比較する、私が作成した小さなプログラムを通じて見つけたものは次のとおりです。
- C# - AssemblyConfigurationAttribute あり、GuidAttribute あり
- VB - 多くの追加の「My」タイプ (例: MyApplication、MySettings) があり、GuidAttibute があります
- F# - 使用されるコンパイラのバージョンも指定する FSharpInterfaceDataVersionAttribute があります。
- C++ (/clr:safe を除くすべて) - 追加の型が多数あります (FrameInfo、type_info)
- C++ /clr:safe - 固有のリフレクション機能がないようです。
次の順序で解析するのが合理的かもしれません。
- FSharpInterfaceDataVersionAttribute があれば F# です
- 私が見つけた余分な型の膨大なセットに含まれている場合、それは C++ です。
- 「My*」タイプがあれば VB です。
- AssemblyConfigurationAttribute または GuidAttribute がある場合は C# です。
- C++ /clr:Safe である可能性が高い
ただし、これは恐ろしいハッキングであるため、ここでチェックインして、利用可能な別のオプションがないことを確認したいと思いました.