我有一个相当大的解决方案,其中包含一些Silverlight和WPF项目,以及一些类库和其他东西。
其中一个项目是一个类库,它引用引用System.Windows
但在运行时,我收到错误:
{"Could not load file or assembly 'System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' or one of its dependencies. The system cannot find the file specified.":"System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e"}
我查看了GAC(C:\Windows\assembly
)并且无法在那里看到它......
这里发生了什么?
参考是:c:\Program Files\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\System.Windows.dll
它存在。
答案 0 :(得分:3)
听起来像你的WPF应用程序正在加载一个引用Silverlight程序集的类库。那不能用,猫狗。如果程序集由WPF和Silverlight应用程序引用,则必须使用不同的框架程序集引用对其进行两次编译。这需要两个项目。在不同的解决方案中保持WPF和Silverlight的分离是避免麻烦的最佳方法。
答案 1 :(得分:1)
我在这两个案例中看到了类似的错误:
当我引用的程序集需要汇编时我没有引用。 。 。在这种情况下,这意味着System.Windows正在使用您需要的其他东西来添加引用。
更有趣的情况是当我真正需要“.Net Framework 4”(没有“客户端配置文件”)时VS2010自动为我选择了“.Net Framework 4 Client Profile”。选择项目属性并查看您的设置。
谢
根据您的要求提供其他说明:
在VS2010中打开解决方案,右键单击有问题的项目(不是解决方案行),然后从底部选择“属性”。在生成的GUI中,选择“应用程序”选项卡,并确保“目标框架”在名称中没有“客户端配置文件”。 。 。那应该是“.NET Framework 4”而不是“.NET Framework 4 Client Profile”。
答案 2 :(得分:1)
我还没有在其他任何地方找到这个解决方案,但偶然发现它是一个试错法......
在我的情况下,错误消息有点误导。提示是它不是真正的“System.Windows”程序集本身,而是其中一个依赖程序集。
您可能想要检查GAC并查看其中一个程序集是否在其中:
尝试从GAC中删除它们,然后进行重建。如果它不起作用,只需打开两个Windows资源管理器窗口并从c:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ Silverlight \ v4.0 \ System.Windows.dll文件夹或Silverlight Toolkit的文件夹,您将回到起点。
这是我怀疑发生的事情: Visual Studio 2010编译器在进行构建时会弄清楚在哪里获取这些引用的程序集,因为GAC程序集始终优先于程序集的另一个副本(甚至是VS2010使用的引用程序集文件夹)。因此,即使程序集在技术上是正确的,使用相同的ID密钥,VS2010编译器的所有内容都无法确定用于构建的库,并且它将拒绝完成构建。
答案 3 :(得分:0)
mmmm有时你把你的类放在不同的项目中,例如你可以为viewmodels创建一个项目,如果是这种情况那么你需要引用PresentationCore.dll,这是让你访问System.windows的dll所以你可以使用ICommand进行命令绑定