Visual Studioのリリース構成とデバッグ構成のどちらでコンパイルされたかによって、動作が異なるコードに問題があります。リリース構成に表示されるすべてのプロジェクトコンパイル設定を手動で変更して、デバッグ構成と一致するようにしましたが、問題は解決しません。
以下のコードは、実行中のアセンブリのGUIDを返します。
private static Guid GetApplicationUid()
{
Assembly assembly = Assembly.GetCallingAssembly();
GuidAttribute attribute = (GuidAttribute)assembly.GetCustomAttributes(typeof(GuidAttribute), false)[0];
return new Guid(attribute.Value);
}
メソッドは「インデックスが配列の境界外にありました」で失敗します。リリースモードでのコンパイル後に実行された場合の例外。デバッグモードで正しく動作します。この理由は、この構成では、GetExecutingAssembly()によって作成されたアセンブリ参照が、基になる「実際の」アセンブリではなく、一時的なアセンブリ(App_Web_eelfd0ff、Version = 0.0.0.0、Culture = neutral、PublicKeyToken = nullなど)に対するものであるためです。
不思議なことに、同じコードを使用し、コンパイルモードに関係なく同じように動作する、同じWebで実行されている別のコンポーネントがあります。
なぜこれが起こっているのですか、そしてそれを防ぐ方法は?