虽然这个问题已有一年了,但我遇到了一篇博文,可以帮助解决这个问题:http://dotnetbyexample.blogspot.com/2014/05/writing-behaviors-in-pcl-for-windows.html - 此博客也包含一个下载示例,因此您可以检查其内部工作原理。该博客与IBehavior
界面一起使用,但conept是相同的。
基本上,该技术被称为“的NuGet诱饵和开关”;您需要创建一个NuGet包,其中包含一个PCL库和一个特定于平台的库(每个平台都有一个库)。
让我们假设你的PCL将被称为“AwesomeMvvm”。你将需要:
- AwesomeMvvm(便携式类库)
- AwesomeMvvm.Silverlight
- AwesomeMvvm.Windows81
- ...
当您尝试使用ICommand
接口在便携式类库(PCL),你会得到一个错误,说明Cannot resolve symbol ICommand
。要解决这个问题,只需创建一个接口,确保它位于相同的命名空间System.Windows.Input
中。您的便携式类库现在可以编译!
既然您的便携式类库已编译完成,请创建特定于平台的库并为它们添加对您的便携式类库的引用。每个这些库的唯一需要的是包含在TypeForwardedToAttribute
作为组件级属性一个代码文件:
[assembly: System.Runtime.CompilerServices.TypeForwardedTo(typeof(System.Windows.Input.ICommand))]
的最后一步是创建一个包含便携式类库单个NuGet包,以及每个平台特定图书馆。如果你做的一切都正确,从你的NuGet提要添加一个引用,一切都应该工作得很好。 NuGet会尽可能地选择特定于平台的库,每个库都依赖于可移植的类库。诀窍是,在运行时它将使用本地版本ICommand
,因为您指定将您的可移植类库版本转发到特定于平台的版本。
看看这里... http://stackoverflow.com/questions/20478138/portable-class-library-icommand-compilation-error-in-wpf-not-sure-how-to-reso – Mashton
我没有,但这是一个稍微不同的问题,不幸的是这个解决方案不适用于此。 –