2012-07-18 75 views
0

有没有办法使用强命名的程序集来代替非命名的程序集?强烈命名的程序集代替非命名的程序集

真正的问题是这样的:

我创建一个库(如:SqliteOrm.dll)(便携式类库在我的实例,通过这个问题是与任何类型)引用另一个库(例如:系统.Data.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上使用我自己的版本。我的版本只包含必要的类型,所以它在这种方式上有所不同。

我目前正在使用地铁和桌面应用程序进行测试,这是发生异常的地方。我隐约想起了一些事实,即M4A运行时并未实际执行检查,但我希望我的库也能在桌面上工作。

有没有人对我有任何提示,或者这是一个不好的做法?

+0

没有强名的System.Data来自哪里?另外:哪些平台在这里有问题?如果它只是桌面,正在处理AppDomain.AssemblyResolve一个选项? *个人*(基于我自己的多平台库经验),我怀疑你会发现拥有每个平台的构建更容易,只需引用相应的dll。通过NuGet部署,这也很容易实现自动化。 – 2012-07-18 19:53:23

回答

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的人感到困惑。

相关问题