"System.IDisposable"类型在未引用的程序集中定义

jia*_*ion 30 .net c# windows

我在Windows 8上的Visual Studio 2012中创建了一个Windows窗体应用程序,目标.NET框架是4.5,我想使用Windows SDK的Datagramsocket库,因此我在编译时将目标操作系统版本更改为8.

我收到以下错误:

"错误1类型'System.IDisposable'在未引用的程序集中定义.您必须添加对程序集'System.Runtime,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'的引用."

Nat*_*han 31

如果您的目标是Windows 8,则MSDN文档包含以下说明:

也就是说,在您使用一个基本参考准备项目之前,您的桌面应用程序不能消耗Windows运行时的任何内容.Windows运行时定义了一些标准类和接口System.Runtime,例如IEnumerable,在整个Windows运行时库中使用.默认情况下,您的托管桌面应用程序将无法找到这些类型,因此您必须手动引用System.Runtime,然后才能对Windows运行时类执行任何有意义的操作.要创建此手册参考:

  1. 在解决方案资源管理器中导航到托管桌面应用程序项目.
  2. 右键单击"引用"节点,然后单击"添加引用".
  3. 单击"浏览"选项卡.
  4. 单击"浏览...".
  5. 导航到System.Runtime.dll外观.您通常可以在类似于以下的路径中找到它:%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades\System.Runtime.dll

希望有所帮助.


Jos*_*osh 19

如果您遇到4.5.2和Unity的此问题,Microsoft已发布修复,知识库文章:http: //support.microsoft.com/kb/2971005

  • 这很有效.在Windows 10下,我必须安装更新的.NET Framework 4.5.2 Developer Pack. (3认同)

Dre*_*kes 1

您的应用程序似乎正在尝试加载System.Runtime版本 4.0,但您尚未安装该版本。您说您已经安装了.NET 4.5,因此您可以提供一些配置来在运行时重定向程序集绑定

尝试将其添加到您的App.configWeb.config文件中:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" />
      <bindingRedirect oldVersion="4.0.0.0" newVersion="4.5.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)

我还没有测试过这个确切的场景,但这个配置在类似的情况下对我有帮助。