【发布时间】:2012-07-19 03:41:53
【问题描述】:
有没有办法使用强命名程序集来代替非命名程序集?
真正的问题是:
我正在创建一个引用另一个库(例如:System.Data.dll)的库(例如:SqliteOrm.dll)(在我的实例中是可移植类库,问题是任何类型),该库因平台而异(iOS、Android、WP、桌面和 WinRT)。这个库(SqliteOrm.dll)然后被每个平台的应用程序使用,但会切换 System.Data.dll。
但是,System.Data.dll 以强名称存在于 GAC 中。这会在使用库时导致异常:
System.IO.FileNotFoundException:
Could not load file or assembly 'System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies.
The system cannot find the file specified.
我这样做的原因是因为 System.Data.dll 在 WP 中不存在,但在 M4A 中存在。我在 M4A 上使用本机 System.Data.dll,但在 WP 上使用我自己的版本。我的版本只包含必要的类型,所以在这方面确实有所不同。
我目前正在使用 Metro 和桌面应用程序进行测试,这就是发生异常的地方。我隐约记得 M4A 运行时实际上并没有进行检查,但我希望我的库也能在桌面上工作。
有没有人给我一些建议,或者这整件事是一个不好的做法?
【问题讨论】:
-
没有强名的System.Data从何而来?另外:哪些平台有问题?如果只是桌面,处理 AppDomain.AssemblyResolve 是一个选项吗? 个人(基于我自己对多平台库的经验),我怀疑您会发现每个平台构建更容易,只需引用适当的 dll。通过 NuGet 部署,这也很容易实现自动化。
标签: .net strongname portable-class-library