Applies ToVisual Studio Ultimate 2012 Visual Studio Premium 2012 Visual Studio Express 2012 for Windows 8 Visual Studio Express 2012 for Windows Desktop Visual Studio Express 2012 for Windows Phone

简介

安装Microsoft Visual Studio 2012 更新 2后,可能会出现可移植类库问题。本文介绍了这些问题和他们的解决方法。

问题 1

症状

当您使用资源来生成可移植类库项目,安装了Visual Studio 2012 更新 2后时,可能会收到以下错误消息︰

System.Type' 不包含定义为程序集和找不到任何扩展方法程序集接受 System.Type' 类型的第一个参数 (是否缺少 using 指令或程序集引用?)

注意:当您使用 Microsoft Visual C# 时,您会收到此错误。

程序集不是 System.Type' 的成员

注意:当您使用 Microsoft Visual Basic,您会收到此错误。以下平台之一在您的项目目标,则会出现此问题︰

  • Microsoft.NET Framework 4.5 和 Windows 应用商店应用程序的.NET

  • .NET Framework 4.5 和 Windows Phone 8

  • .NET Framework 4.5,为 Windows 应用商店应用程序,.NET 和 Windows Phone 8

解决方法

若要变通解决此问题,请修复由设计器生成的代码的资源文件。若要执行此操作,双击错误消息,然后按照下列步骤操作︰

对于 C#

  1. 添加以下 using 指令︰

    using System.Reflection;
  2. 找到下面的代码︰

    typeof(Resource1).Assembly

    该代码替换为以下代码︰

    typeof(Resource1).GetTypeInfo().Assembly

下面的代码是一个具有此问题的示例︰

        /// <summary>         ///   Returns the cached ResourceManager instance used by this class.        /// </summary>        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]internal static global::System.Resources.ResourceManager ResourceManager {        get {                if (object.ReferenceEquals(resourceMan, null)) {                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PortableClassLibrary2.Resource1", typeof(Resource1).Assembly);                    resourceMan = temp;                }                return resourceMan;            }        }

Visual Basic

  1. 添加以下 using 指令︰

    Imports System.Reflection;
  2. 找到下面的代码︰

    GetType(Resource1).Assembly

    该代码替换为以下代码︰

    GetType(Resource1).GetTypeInfo().Assembly

下面的代码是一个具有此问题的示例︰

        '''<summary>        '''  Returns the cached ResourceManager instance used by this class.        '''</summary>        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _        Friend Shared ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager            Get                If Object.ReferenceEquals(resourceMan, Nothing) Then                    Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("PortableClassLibrary1.Resource1", GetType(Resource1).Assembly)                    resourceMan = temp                End If                Return resourceMan            End Get        End Property

问题 2

症状

您不能使用资源来安装Visual Studio 2012 更新 2后生成可移植类库项目。此外,您可能会收到很多不同的错误消息之一。例如,您可能会收到以下错误消息之一︰

在一个未被引用的程序集定义类型 System.Net.HttpStatusCode。您必须添加对程序集的引用 ' System.Net、 版本 = 2.0.5.0,区域性程序 = 7cec85d7bea7798e,Retargetable = 是。

无法隐式转换为类型 System.Net.HttpStatusCode System.Net.HttpStatusCode [%programfiles%\Reference Assemblies\Microsoft\Framework\。NETPortable\v4.5\Profile\Profile78\System.Net.Primitives.dll]

请注意以下平台之一针对项目中时,会发生此问题︰

  • .NET Framework 4.5 和 Windows Phone 8

  • .NET Framework 4.5,为 Windows 应用商店应用程序,.NET 和 Windows Phone 8

原因

因为 Windows Phone 软件开发工具包 (SDK) 8.0 安装后安装 Visual Studio 2012 更新 2,将出现此问题。因此,删除以下文件︰

  • %programfiles%\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile49\System.Net.dll

  • %programfiles%\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile49\System.ServiceModel.dll

  • %programfiles%\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile78\System.Net.dll

  • %programfiles%\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile78\System.ServiceModel.dll

解决方法

若要解决此问题,请运行 Visual Studio 2012 修复程序。若要执行此操作,请执行以下步骤:

  1. 单击开始,单击控制面板,单击程序,然后单击程序和功能

  2. 用鼠标右键单击已安装的 Visual Studio 2012 的版本,然后单击更改

  3. Visual Studio 2012 安装向导打开时,请单击修复

注意:如果您设置了一个新的开发环境,若要避免此问题,您应该安装 Visual Studio 2012 更新 2 之前安装 Windows Phone 8.0 SDK。

状态

Microsoft 已经确认这是“适用于”一节中列出的 Microsoft 产品中的问题。

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。