m-y*_*m-y 5 .net c# wpf portable-class-library visual-studio-2013
一些背景资料:
ICommand在我的类中实现了名为的接口MyCommand.MyCommand.cs:
public class MyCommand : ICommand
{
public bool CanExecute(object parameter)
{
throw new NotImplementedException();
}
public void Execute(object parameter)
{
throw new NotImplementedException();
}
public event EventHandler CanExecuteChanged;
}
Run Code Online (Sandbox Code Playgroud)
我发现当我尝试引用MyCommand在WPF 4.5应用程序中使用该类时,我收到以下错误:
"System.Windows.Input.ICommand"类型在未引用的程序集中定义.您必须添加对程序集'System.Windows,Version = 2.0.5.0,Culture = neutral,PublicKeyToken = 7cec85d7bea7798e,Retargetable = Yes'的引用.
我不确定为什么会这样,或者我能做些什么来妥善解决它.在浏览互联网之后,我找到了关于System.Windows.dll 4.0.0.0在我的WPF应用程序中添加引用的答案.这样做允许我编译和运行应用程序,但我的IDE抱怨:
接口成员'void System.Windows.Markup.IComponentConnector.Connect(in,object)'未实现.
这发生在我的MainWindow.cs类中.是否有一个更好的解决方案,而不是只处理这个错误,所以我不是System.Windows.dll在WPF应用程序中添加一个真正不需要它的引用?而且我说它并不真的需要它,因为如果我将MyCommand类复制/粘贴到Wpf应用程序中它可以正常工作.它只有一个问题,因为我试图将它用作可移植类库.
更新:
似乎除此之外还有更多的东西.我创建了一个新的Wpf应用程序并使用NuGet来引用MvvmCross解决方案(因为它有一个MvxCommand对象).当我这样做时,我得到同样的错误.
David Kean 对类似问题的回答表明这应该通过VS2012/VS2013修复,如果没有,只需重新安装/修复.我完全删除了我的VS安装并从头开始重新安装(VS2013),但仍有此问题.那么,这真的是一个错误,还是我在这里做错了什么?
更新2:
我试图看看是否可以将MyCommand类的实例分配给ICommand:ICommand cmd = new MyCommand();并收到以下错误:
无法将类型'PortableClassLibrary1.MyCommand'隐式转换为'System.Windows.Input.ICommand'.存在显式转换(您是否错过了演员?)
出于某种原因,PCL似乎没有为我的桌面应用程序向System.Windows.dll [2.0.5.0]ICommand输入System.dll [4.0.0.0]ICommand ...呃!
更新3:
我上传了我的解决方案,以便更清楚地了解问题所在.
更新4:
我在这个问题上打开了一个Microsoft连接票.
更新5:
在对这不起作用感到沮丧之后平静下来......还有其他人告诉我他们没有得到相同的"界面"错误.我意识到添加的"副作用" System.Windows.dll是ReSharper 8.1错误.我想是时候向ReSharper而不是微软抱怨了.叹
您必须添加对程序集'System.Windows,Version = 2.0.5.0的引用
建议非常好,信息不是很好.很显然,你对版本号感到困惑.右键单击您的WPF项目,添加引用并勾选System.Windows.这解决了你的问题.
缺少的魔法是System.Windows.dll引用程序集中的这一行:
[assembly: TypeForwardedTo(typeof(ICommand))]
Run Code Online (Sandbox Code Playgroud)
这使ICommand从System.Windows.dll转发到System.dll
请记住,c:\ program files(x86)\ reference assemblies子目录中的System.Windows.dll 只是一个引用程序集.它根本不包含任何代码或类型,只包含[TypeForwardedTo]属性.它充当"适配器",弥合了不同.NET框架平台之间的差距.最终的可执行文件实际上根本不依赖于System.Windows.dll.
| 归档时间: |
|
| 查看次数: |
3249 次 |
| 最近记录: |