Windows 10 UWP(15063)では、特定のカスタム属性で装飾された型を検出するためにアセンブリを呼び出す際に型を反復処理する必要があります。私は古いSystem.Reflection.Assembly.Current.GetCallingAssembly()メソッドを見つけることができませんでした。ここに私が思い付いた代替(未テストプロトタイプ)だ:これは、Windows 10 UWPでCalling Assemblyを取得する最善の方法ですか?
using System;
using System.Diagnostics;
using System.Reflection;
using System.Linq;
namespace UWPContainerUtility
{
public static class Helpers
{
public static Assembly GetCallingAssembly()
{
var thisAssembly = typeof(Helpers).GetTypeInfo().Assembly;
StackFrame[] frames = GetStackTraceFrames();
var result = frames.Select(GetFrameAssembly)
.FirstOrDefault(NotCurrentAssembly);
return result;
StackFrame[] GetStackTraceFrames()
{
StackTrace trace = null;
try
{
throw new Exception();
}
catch (Exception stacktraceHelper)
{
trace = new StackTrace(stacktraceHelper, true);
}
return trace.GetFrames();
}
Assembly GetFrameAssembly(StackFrame f)
{
return f.GetMethod().DeclaringType.GetTypeInfo().Assembly;
}
bool NotCurrentAssembly(Assembly a)
{
return !ReferenceEquals(thisAssembly, a);
}
}
}
}
は、現在、実際に偽の例外を投げるよりも、この他を行うには、他の方法はありませんか?これを行う本当の方法は何ですか?
ありがとうございます!
*明瞭
テストでは、これは失敗します。 StackTraceには1つのフレームしかありません。 –
私は同意することができます。これは失敗します。受信アセンブリのコンテキストで例外をスローすると、受信アセンブリのみでスタックトレースが発生します。この作業を行うには、実際に呼び出しアセンブリに例外をスローする必要があります。しかし、それはばかげているでしょう。もちろん。 –