AppXパッケージディレクトリ(MSDNフォーラムから)からの動的アセンブリロードの例:
private async Task<IEnumerable<Assembly>> GetAssemblyListAsync()
{
var folder = Windows.ApplicationModel.Package.Current.InstalledLocation;
List<Assembly> assemblies = new List<Assembly>();
foreach (StorageFile file in await folder.GetFilesAsync())
{
if (file.FileType == ".dll" || file.FileType == ".exe")
{
var name = file.Name.Substring(0, file.Name.Length - file.FileType.Length);
Assembly assembly = Assembly.Load(new AssemblyName() { Name = name });
assemblies.Add(assembly);
}
}
return assemblies;
}
アセンブリをアプリケーションパッケージに追加する必要があります。外部ソースからダウンロードすることはできません。
ただし、すべてが単一のDLLにマージされるため、このアプローチは.NETネイティブでは機能しません。アセンブリ名のリストをどこかに(Assets内の単純なファイルに)保存し、Assembly.Load
各アイテムを呼び出す必要があります。
デバッグモードでの動的アセンブリリストとリリースモードでのアセンブリ名の事前定義された配列の例(.NETネイティブツールチェーン)。
#if DEBUG
using Windows.Storage;
#endif
// ...
IEnumerable<string> assemblyNames;
#if DEBUG
assemblyNames = Windows.ApplicationModel.Package.Current.InstalledLocation.GetFilesAsync().AsTask().Result
.Where(file => file.FileType == ".dll" && file.Name.Contains("Business"))
.Select(file => file.Name.Substring(0, file.Name.Length - file.FileType.Length));
#else
assemblyNames = new[] { "California.Business", "Colorado.Business" };
#endif
foreach (var name in assemblyNames)
{
var assembly = Assembly.Load(new AssemblyName() { Name = name });
// Load required types.
// ...
}