【问题标题】:Strongly named assembly in place of a non-named assembly强命名程序集代替未命名程序集
【发布时间】: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


【解决方案1】:

考虑在任何地方使用您自己的 System.Data。可能比其他任何事情都少很多痛苦。

这里有一些建议可以替代:http://www.simple-talk.com/blogs/2007/08/30/strong-naming-remoting-nothg-but-ye-liveliest-awfulness/

然后有一个疯狂的方法:它实际上可以将您的程序集设置为由 MS 密钥延迟签名,然后在安装时将程序集注册为延迟签名程序集(在 WP 上)。当然,现在您需要管理员权限才能安装,并且可能会让任何期望在 WP 上更健全的 System.Data 的人感到困惑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多