有没有办法使用强名称程序集代替非命名程序集?
真正的问题是:
我正在创建一个库(例如:SqliteOrm.dll)(我的实例中的可移植类库,问题是任何类型)引用另一个库(例如:System.Data.dll),这个库因平台而异(iOS,Android,WP,桌面和WinRT)。然后,每个平台的应用程序都会使用此库(SqliteOrm.dll),但会切换System.Data.dll。
但是,GAC中存在System.Data.dll,其名称很强。这会在使用库时导致异常:
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.
我这样做的原因是因为WP中不存在System.Data.dll,但是在M4A中不存在。我在M4A上使用本机System.Data.dll,但在WP上使用我自己的版本。我的版本只包含必要类型,因此它的确有所不同。
我目前正在使用Metro和桌面应用进行测试,这就是发生异常的地方。我含糊地回忆起M4A运行时实际上没有进行检查的事实,但我希望我的库也可以在桌面上工作。
有没有人对我有任何提示,或者整件事情是不好的做法?
答案 0 :(得分:0)
考虑在任何地方使用您自己的System.Data。可能比其他任何东西都痛苦得多。
这里有一些建议替代方案:http://www.simple-talk.com/blogs/2007/08/30/strong-naming-remoting-nothg-but-ye-liveliest-awfulness/
然后就是疯狂的方式:它实际上可以将程序集设置为由MS密钥延迟签名,然后在安装时将程序集注册为延迟签名的程序集(在WP上)。当然,现在你需要安装管理员权限,并且可能会让任何想要在WP上更加理智的System.Data的人感到困惑。