找不到System.Windows.Media命名空间?

102

我正在使用一个第三方API中的对象,该对象具有类型为System.Windows.Media.ImageSource的属性,但是我似乎找不到任何关于System.Windows.Media命名空间的信息。如果我尝试在项目中添加引用,我在选项列表中看不到System.Windows.Media。我的项目也针对.NET 3.5。

我需要做些什么才能访问这个命名空间呢?


3
对于那些像我几天前一样通过谷歌搜索的人,提供一个小提示:您解决方案中的项目可能具有不同的框架目标,因此如果找不到引用,请始终仔细检查要查看的文件实际位于哪个项目中,并且该项目是否仍针对旧版.NET进行目标设置。 - Akku
7个回答

104

你需要添加对PresentationCore.dll的引用。


6
没有网络访问时如何记住参考文献或解决这类问题? - Anirban Nag 'tintinmj'
20
我给这个答案投了反对票,因为像我这样的新手不知道那个文件可能存在哪里。 - John
3
目前为止最佳答案。而且,我不知道参考文献窗口顶部有搜索栏,我一直在滚动尝试找到可以添加的参考文献。感谢您指出这一点! - allegory
是的,这就是需要做的事情,但是Mehmedov的答案得到了我的投票,因为他告诉我它在哪里。这绝非显而易见。此外,在.NET框架的每个版本文件夹中都有PresentationCore.dll。首先查看您正在使用哪个框架(4.5、4.6、4.61等),然后再查找您的项目。 - JustJohn
但是怎么……? - undefined
显示剩余2条评论

68

System.Windows.Media.Imaging 命名空间是 PresentationCore.dll 的一部分(如果您正在使用 Visual Studio 2008,则 WPF 应用程序模板将自动添加此引用)。请注意,尽管许多常见用法仍然可用,并且它们如何映射到 WIC 版本相对明显,但该命名空间不是 WIC 库的直接包装。有关此命名空间中的类的更多信息,请查阅http://msdn2.microsoft.com/en-us/library/system.windows.media.imaging.aspx


7
如果那个链接失效或页面重定向,这个答案就没有用了。下次请提供像@MegaMilivoje所提供的真正答案。 - leetNightshade
7
在这些情况下,我们如何找出需要哪个DLL?链接中没有提到DLL甚至没有提到“presentation”一词。你的答案可以解决问题,但不清楚如果没有寻求帮助,我们该如何解决。 - Kat
2
@leetNightshade 你好,来自2023年的问候!你是对的。链接已经失效,答案也变得无用了 :P - Świętopeł Ziemowit
答案是“将PresentationCore.dll添加到引用中”,伙计们。链接只是提供更多信息的。如果您想要更多信息,可以在谷歌上搜索“System.Windows.Media”。 - VOX

41

PresentationCore.dll添加到您的引用中。此dll在我的计算机上的URL为- C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\PresentationCore.dll


19

通过编辑项目文件,您可以更方便地添加PresentationCore.dll。将以下代码添加到您的csproj文件中:

<ItemGroup>
   <FrameworkReference Include="Microsoft.WindowsDesktop.App" />
</ItemGroup>

在您的解决方案资源管理器中,您现在应该看到列出了此框架。有了这个,您还可以引用由PresentationCore.dll提供的类。


这是一个好的解决方案。我正在使用Asp.net Blazor,并将其添加到csproj文件中,它可以正常工作。 - Rifat Murtuza
当我在VSCode中创建了一个.NET 6项目时,这个解决方案起作用了。 - Onosa

19

针对 Visual Studio 2017

在“解决方案资源管理器”中找到“引用”

右键单击“引用”

选择“添加引用...”

找到“Presentation.Core”列表并选中复选框

点击确定


1
然后我需要从相同的目录中添加 WindowsBase.dll - Andrei Krasutski
有没有相应的NuGet包? - Demodave
顺便提一下,它将在“程序集”下。 - Tracy Moody

2
我在CodeProject找到了一个对我有用的答案。
打开你的工程文件,即*.csproj文件,以文本文件的方式进行编辑。如果像我一样,你的目标是net6.0,你会看到类似下面这样的内容:
<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
        <OutputType>WinExe</OutputType>
    </PropertyGroup>

</Project>

现在,你需要将目标从net6.0更改为net6.0-windows,并且还必须设置UseWpf标志。然后你的*.csproj文件应该像这样:
<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>net6.0-windows</TargetFramework>
        <UseWpf>true</UseWpf>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
        <OutputType>WinExe</OutputType>
     </PropertyGroup>

</Project>

这就是方法。很可能你也需要WindowsBase.dll,这也会处理好的。 - gghuffer

0
在我的情况下,我需要指定Platforms标签 - 出于某种原因,否则它不起作用。
  <PropertyGroup>
    <!-- Must be here for this example, otherwise 'using System.Windows.Media.Media3D' does not work for intellisense -->
    <Platforms>x64</Platforms>
  </PropertyGroup>

Visual Studio 2019 v16.9.1。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接