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



我的项目文件夹中有一个.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的主根目录?

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

存储应用程序的位置有两个:如果是框架程序集,则在GAC中;如果是用户程序集,那么在Appx包中。

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

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

最新更新