我的项目文件夹中有一个.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根目录?
答案 0 :(得分:2)
我假设您在Windows应用商店应用中运行可移植库(基于您尝试加载的程序集名称)。
存储应用程序有两个地方可以找到它们的程序集,如果是框架程序集,则在GAC中;如果是用户程序集,则在Appx程序包中找到它们。
由于“Portable.Store”(我假设是来自我的PclContrib项目)是一个用户程序集,它必须从AppX包加载。要确保两个程序集最终都在AppX程序包中,只需确保包含AppxManifest的Windows应用商店项目引用它们。就是这样。
如果Assembly.Load仍然找不到程序集,请检查以确保传递给Assembly.Load的强名称是正确的。