如何加载放置在项目(可移植类库)文件夹中的程序集?

时间:2013-08-14 18:12:27

标签: c# .net reflection windows-store-apps portable-class-library

我的项目文件夹中有一个.dll文件,想通过Assembly.Load()加载它。

AssemblyName name = new AssemblyName("Portable.Store, Version=0.1.0.0, Culture=neutral, PublicKeyToken=12ay62c33eocf6uf");
Assembly assembly = Assembly.Load(name);

但是由于没有指定路径,这会抛出FileNotFoundException。我无法使用Assembly.LoadFrom()Assembly.LoadFile(),因为便携式类库仅支持Assembly.Load()

有没有办法在pcl中执行此操作?感谢任何帮助,谢谢!

编辑#1 :如果我尝试加载的程序集是非PCL,这是否重要?我知道这会破坏PCL的目的但是有一些库不包含在PCL中。因此,使用条件编译,根据平台,我将加载特定于平台的程序集。

编辑#2 :找到有关dll放置位置的更多信息:https://stackoverflow.com/a/6440406/2464165

截至目前,我只是将它放在我的项目文件夹中,使用.sln文件,什么不是应用程序探测路径?

编辑#3 :我能够将我的dll文件放在.dll文件的资源文件夹中。所以我有MyPCL.dll,里面就是我有ResourcesFolder / Portable.Store的地方。我怎么能告诉Assembly.Load查看特定文件夹而不仅仅是主AppX根目录?

1 个答案:

答案 0 :(得分:2)

我假设您在Windows应用商店应用中运行可移植库(基于您尝试加载的程序集名称)。

存储应用程序有两个地方可以找到它们的程序集,如果是框架程序集,则在GAC中;如果是用户程序集,则在Appx程序包中找到它们。

由于“Portable.Store”(我假设是来自我的PclContrib项目)是一个用户程序集,它必须从AppX包加载。要确保两个程序集最终都在AppX程序包中,只需确保包含AppxManifest的Windows应用商店项目引用它们。就是这样。

如果Assembly.Load仍然找不到程序集,请检查以确保传递给Assembly.Load的强名称是正确的。